用于Python项目的低内存和最快查询数据库

时间:2011-09-10 23:49:55

标签: python database nosql rdbms

由于新的定价,我正在将GAE / Java应用程序迁移到Python(非GAE),所以我得到一个小服务器,我想找到一个符合以下要求的数据库:

  • 内存使用率低(或可调节或可预测)
  • 通过密钥识别的简单文档/树状数据的最快查询功能(我不关心写入时的性能,我认为它会有索引)
  • 绑定与Pypy 1.6兼容性(至少是Python 2.7)

我的数据是这样的:

  • Id:短密钥字符串
  • 标题
  • 创作者:另一个数据结构的数组,其中包含一个id - 用作键 - ,名称,站点地址等。
  • 标签:标签数组。它们中的每一个都可以有多个父标签,名称,id等等。
  • 许可证:描述其许可证(CC,GPL,......你说的)的数据结构,包括名称,相关URL等。
  • 添加时间:在我们网站上添加时。
  • 翻译:指向其他条目的指针,这些条目是一个创作的翻译。

我的查询非常简单。通常的情况是:

  • 按添加时间排序的标记进行过滤。
  • 选择按添加时间排序的几个(分页)。
  • (可能,尚未完成)按创建者过滤。
  • (未完成但已计划)表单中的一些自动完成功能,因此如果某些字段包含子字符串('LIKE'查询),我将需要搜索。

数据量不大。现在我有大约50MB的数据,但我计划拥有一个大约10GB的巨大数据集。

另外,我想从头开始重建,所以我愿意接受任何选择。您认为哪个数据库可以满足我的要求?

编辑:我想围绕不同的选项做一些基准测试并分享结果。到目前为止,我已经选择了MongoDB,PostgreSQL,MySQL,Drizzle,Riak和Kyoto Cabinet。

2 个答案:

答案 0 :(得分:3)

迁移应用引擎应用的阻力最小的路径可能是使用AppScale,它实现了应用引擎API的主要部分。特别是,您可能希望使用HyperTable数据存储,该数据存储与Google App Engine数据存储区域非常相似。

编辑:好的,所以你要重新设计。我想谈谈你在问题中提出的一些观点。

  

内存使用率低

这几乎与数据库中的内容完全相反;您需要尽可能多的核心内存中的数据集;这可能意味着调整数据集本身以有效适应,或添加memcached节点,以便您可以跨多个主机传播数据集,以便每个主机具有足够小的数据集,使其适合核心。

要将这一点推向家庭,请考虑从ram读取值比从磁盘读取值快大约1000倍;与只需1%的查询访问磁盘的数据库相比,可以满足核心每个查询的数据库可以处理10倍的工作量。

  

我计划拥有一个10GB左右的庞大数据集。

我认为你不能将10GB称为“庞大的数据集”。事实上,这可能适合大型数据库服务器的内存;您不需要多个memcached节点,更不用说额外的持久节点(典型磁盘大小在TB级,比预期的数据集大100倍。


根据这些信息,我肯定会建议使用像PostgreSQL这样的成熟数据库产品,它可以为您描述的数据提供充足的性能,轻松提供您正在谈论的所有功能。如果您需要扩展PostgreSQL实际提供的内容,那么您实际上需要分析一个真正的工作负载才能知道瓶颈究竟是什么。

答案 1 :(得分:1)

我会推荐Postresql,因为它可以做你想要的,可以扩展,快速,相当容易使用和稳定。

在给出的示例查询中速度非常快,并且在查询文档时可能更快。