3

我正在尝试将从数据采集系统收集的数据写入内存中的位置,然后对数据进行异步进一步处理,或者将其写入文件以进行离线处理。我正在尝试以这种方式实现这种架构,以将数据采集与数据分析和传输隔离开来,为我们未来的扩展和改进提供了一些灵活性,但它肯定比简单地将数据直接写入文件更复杂。

这是我写的一些探索性代码。

#io.BufferedRWPair test
from io import BufferedRWPair

# Samples of instrumentation data to be stored in RAM
test0 = {'Wed Aug  1 16:48:51 2012': ['20.0000', '0.0000', '13.5', '75.62', '8190',
                    '1640', '240', '-13', '79.40']}
test1 = {'Wed Aug  1 17:06:48 2012': ['20.0000', '0.0000', '13.5', '75.62', '8190',
             '1640', '240', '-13', '79.40']}

# Attempt to create a RAM-resident object into which to read the data.
data = BufferedRWPair(' ', ' ', buffer_size=1024)

data.write(test0)
data.write(test1)

print data.getvalue()

data.close()

这里有几个问题(也许更多!):

-> 'data' 是一个变量名,用于选取我正在尝试组装的构造(Python 之外)——这是一个类似数组的结构,应该保存顺序记录,每条记录包含多个过程数据测量值,前言通过可以作为检索键的时间戳。我将此作为我的设计意图的背景,以防代码太模糊而无法反映我的真实问题。

-> 此代码不起作用,因为未创建“数据”对象。我只是想打开一个空缓冲区,稍后再填充,但 Python 正在寻找两个对象,一个可读,一个可写,它们在我的代码中不存在。因此,我不确定我是否使用了正确的构造,这会导致以下问题:

  1. io.BufferedRWPair 是处理这些数据的最佳方式吗?我已经尝试过 StringIO,因为我使用的是 Python 2.7.2,但没有运气。我喜欢带有时间戳键的记录的想法,因此我选择了 dict 结构,但我肯定会考虑替代方案。我应该看其他 io 类吗?

  2. 我看过的另一种选择是在 NumPy/SciPy/Pandas 世界中定义的 DataFrame 构造。它看起来很有趣,但似乎需要很多额外的模块,所以我回避了。我对这些模块中的任何一个都没有经验——我应该查看这些更复杂的模块来获得我需要的东西吗?

我欢迎任何建议或反馈,伙计们......感谢您查看这个问题!

4

2 回答 2

3

如果我理解您的要求,那么使用内存中的 sqlite 数据库可能是可行的方法。Sqlite 允许您完全在内存中创建功能齐全的 SQL 数据库。您可以进行选择和插入,而不是读取和写入。

于 2012-08-03T23:33:53.820 回答
0

编写一种机制来在内存中保存合适的数据,并且只在必要时将其写入文件是多余的——操作系统无论如何都会为你做这件事。如果您使用普通文件并从应用程序的不同部分访问它,只要有足够的内存可用,操作系统就会将文件内容保存在磁盘缓存中。

如果您想通过内存地址访问文件,您可以使用mmap模块对其进行内存映射。但是,我的印象是,您所需要的只是一个标准数据库,或者 Python 标准库提供的更简单的替代方案之一,例如shelveanyanydbm模块。

Redis根据您的评论,还可以查看和之类的键值对存储memcached

于 2012-08-05T16:55:46.293 回答