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

4 投票
4 回答
561 浏览
提问于 2025-04-15 19:13

我正在用Python写一个数据处理库,这个库可以从各种来源读取数据到内存中,处理这些数据,然后把它们导出成不同的格式。我之前是把数据直接加载到内存里的,但我处理的一些数据集特别大(超过4GB)。

我需要一个开源的库,能够优雅地处理大数据集。这个库需要能动态改变数据结构(比如添加、重命名和删除列),而且支持比较快的迭代。理想情况下,它应该能处理任意大小的字符串和整数(就像Python一样),不过如果需要的话,我可以把这个功能加到库里。而且,它还需要能处理缺失值。

有没有人有什么建议?

4 个回答

1

可以试试 Metakit。它在数据结构上很灵活,并且支持Python语言。虽然它不太被人关注,但其实已经存在很长时间了。

1

另一个建议是可以考虑使用Hadoop作为你的后台。它和之前提到的CouchDB有一些相似之处,但Hadoop更专注于高效处理大数据集,使用的是MapReduce算法。

跟CouchDB相比,Hadoop不太适合实时应用或者作为网站后面的数据库,因为它访问单个数据的速度比较慢。但当你需要处理大量数据时,它的表现非常出色,甚至可以处理达到Peta字节级别的数据。

所以,也许你可以试试Hadoop。当然,熟悉这些MapReduce算法可能需要一些时间,但它们确实是描述这类问题的好方法。而且,你不需要自己处理中间结果的存储。一个不错的副作用是,当你的数据集变大时,你的算法仍然可以正常工作,不过那时候你可能需要再加一台服务器。:-)

关于Hadoop和MapReduce,有很多书籍和文档可以参考,这里有一个不错的教程,可以帮助你开始使用Hadoop和Python。

3

文档型数据库应该能很好地处理这种工作负载,只要你不需要复杂的连接操作。

常见的文档型数据库有CouchDBMongoDB

这两种数据库都很适合用来处理类似MapReduce的算法(这包括遍历所有数据集)。如果你想把新数据合并到已有的行中,你需要确保“表”是有序的,或者能够快速访问单个元素:这两者的关键在于有一个索引。

文档型数据库通过拥有不同结构的文档来支持多个“表”。它们可以毫无问题地查询特定结构的文档。

我认为你很难找到一种轻量级的解决方案来处理多个4GB的数据集,尤其是你提到的那些要求。特别是动态数据结构的实现速度是比较难的。

撰写回答