【发布时间】:2013-03-06 00:33:18
【问题描述】:
我正处于构建模拟的规划阶段,需要基于内存和速度考虑如何表示数据的想法。
在每个时间步,模拟过程创建 10^3 到 10^4 个新数据记录,并查看每个新的或现有的记录(其中有 10^6 到 10^8 个),然后将其删除或修改它。
每条记录有 3-10 个简单字段,每个字段要么是整数,要么是由几个 ASCII 字符组成的字符串。此外,每条记录还有 1-5 个其他字段,每个字段都是一个包含整数的可变长度列表。一条典型的记录重 100-500 字节。
修改或删除过程是这样工作的:对于这条记录,计算一个函数,其参数是这条记录的某些字段的值,以及另一条记录的这些字段的值。根据结果,进程准备以某种方式删除或修改其字段。
然后为彼此重复记录。然后移动到下一条记录并重复。当所有记录都处理完毕后,模拟就可以进入下一个时间步了。
在进入下一个时间步之前,应用所有准备好的删除和修改。
允许的记录越多,模拟效果就越好。如果所有记录都在 RAM 中,则缺点是模拟大小,可能优点是速度。模拟不需要是实时的,但显然我不希望它太慢。
为了表示内存中的每条记录,我知道以下选项:列表或字典(其中嵌套了一些列表)或类实例。为了存储所有记录并在另一天继续模拟,按我熟悉的顺序排列的选项是:一个 csv 文件,其中每一行都是一个记录,或者只是将所有记录放在 RAM 中,然后将它们放入一个文件中(也许使用pickle),或者使用某种数据库。
我已经学习了 Python 基础知识以及生成器等一些概念,但还没有学习数据库,没有尝试过酸洗,显然需要学习更多。如果可能的话,我会避免使用多台计算机,因为我只有 1 台,并发因为看起来太吓人了。
您对如何在内存中表示记录以及如何存储模拟系统有何建议?
【问题讨论】:
-
首先从最简单的方法开始,但留下[足够]抽象以根据需要进行更改。无论如何,“键值存储”或“持久哈希”存储可能值得研究。
标签: python python-2.7 simulation database-performance