我应该为我的Python库使用什么后备存储引擎?

时间:2010-02-12 19:56:04

标签: python storage

我正在用Python编写一个数据处理库,它将各种来源的数据读入内存,对其进行操作,然后将其导出为各种不同的格式。我正在将这些数据加载到内存中,但我正在处理的一些数据集可能特别大(超过4 Gig)。

我需要一个支持商店的开源库,它可以优雅地处理大型数据集。它需要能够动态地改变数据结构(添加,重命名和删除列),并且应该支持合理快速的迭代。理想情况下,它应该能够处理任意大小的字符串和整数(就像python一样)但是如果需要的话我可以将它构建到库中。它需要能够处理缺失的值。

有人有任何建议吗?

4 个答案:

答案 0 :(得分:3)

只要您没有复杂的连接,面向文档的数据库就可以应对这种工作负载。

常见代表是CouchDBMongoDB

它们非常适合MapReduce算法(这包括迭代所有数据集)。如果要将行与新数据合并,则需要对“表”进行排序或快速访问单个元素:两者都归结为具有索引。

面向文档的DB通过使文档具有不同的模式来支持多个“表”。他们可以使用特定模式查询文档而不会出现问题。

我认为您不会找到一个轻量级解决方案来处理多个4 GB数据集,其中包含您列出的要求。特别是动态数据结构很难快速实现。

答案 1 :(得分:1)

尝试Metakit。它允许模式的灵活性并具有Python绑定。虽然压力不大,但已经有一段时间了。

答案 2 :(得分:1)

另一个想法可能是使用Hadoop作为后端。它与之前提及的CouchDB有相似之处,但更侧重于使用MapReduce算法有效处理大数据集。

与CouchDB相比,Hadoop并不适合实时应用程序或作为网站背后的数据库,因为它具有访问单个条目的高延迟,但是当迭代所有元素和计算时它真正闪耀甚至数据的Peta-Bytes。

所以也许你应该尝试一下Hadoop。当然,可能需要一些时间来习惯那些MapReduce算法,但它们确实是描述这些问题的好方法。而且您不必自己处理中期结果的存储。一个很好的副作用是,当您的数据集变大时,您的算法仍然可以工作,但是您可能必须添加另一台服务器。 : - )

还有很多关于Hadoop和MapReduce的书籍和文档,这里有一个nice tutorial可以帮助你开始使用Hadoop和Python。

答案 3 :(得分:0)

Pytables可能是你的答案,虽然我怀疑它主要用于数字数据,它也可能适合你的账单(根据我在他们的主页上看到的)。