【发布时间】:2011-07-06 21:05:44
【问题描述】:
我正在做一些数据处理,如果我可以将一堆字典放在内存数据库中,然后对它运行简单的查询,这将变得相当简单。
例如:
people = db([
{"name": "Joe", "age": 16},
{"name": "Jane", "favourite_color": "red"},
])
over_16 = db.filter(age__gt=16)
with_favorite_colors = db.filter(favorite_color__exists=True)
不过,有三个混淆因素:
- 一些值将是 Python 对象,序列化它们是不可能的(太慢,破坏身份)。当然,我可以解决这个问题(例如,通过将所有项目存储在一个大列表中,然后在该列表中序列化它们的索引......但这可能需要相当多的摆弄)。
- 将有成千上万的数据,我将对它们运行大量查找操作(如图形遍历),因此它必须能够执行高效(即索引)查询。
- 在示例中,数据是非结构化,因此需要我预定义架构的系统会很棘手。
那么,这样的事情存在吗?还是我需要拼凑一些东西?
【问题讨论】:
-
我不确定任何解决方案都能满足您的所有三个要求。特别是,为你做索引的东西不太可能与笨拙的 Python 对象一起工作。如果是这样,您需要对其进行序列化,或者构建自己的索引。
-
为什么你认为 Python 对象的序列化会很笨拙?两种主要类型的索引——哈希表和二叉树——只需要对象来实现哈希函数或比较运算符,而 Python 对象可以完成所有这些……
-
但是,是的——可能没有人建立一个通用的对象数据库,它的行为完全符合我的意愿……但我认为这值得一问。
-
您可能对 my answer here 或 Divmod 的 Axiom 库感兴趣(不幸的是,他们的网站最近遭遇了严重中断,所以没有链接,但这里有一个 saved version)。
标签: python database data-munging