Python项目的低内存和快速查询数据库

2024-06-07 13:01:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 低内存使用率(或可调整或可预测)
  • 对由键标识的简单文档/树型数据的最快查询能力(我不关心写操作的性能,我假设它会有索引)
  • 与pypyy1.6兼容的绑定(至少是python2.7)

我的数据是这样的:

  • Id:短键串
  • 标题
  • Creators:另一个数据结构的数组,它有一个id(用作键)、一个名称、一个站点地址等
  • 标记:标记数组。它们中的每一个都可以有多个父标记、一个名称、一个id等等
  • 许可证:描述其许可证(CC,GPL。。。你说它)与名称,相关的网址,等等
  • 添加时间:当它被添加到我们的网站。在
  • 翻译:指向其他条目的指针,这些条目是一个创作的翻译。在

我的问题很简单。通常情况是:

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

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

另外,我想从头开始重建,所以我愿意接受任何选择。你认为什么数据库能满足我的要求?在

我想分享一些不同的结果。到目前为止,我已经选择了MongoDB、PostgreSQL、MySQL、毛毛雨、Riak和京都内阁。在


Tags: 数据内存标记服务器名称id数据库应用程序
2条回答

我推荐Postresql,只是因为它能满足您的需要,可以扩展,速度快,非常容易使用并且稳定。在

对于给定的示例查询,它的速度非常快,而对于文档查询则可能更快。在

迁移appengine应用程序的阻力最小的路径可能是使用AppScale,它实现了appengineapi的主要部分。特别是,您可能希望使用HyperTable数据存储,它紧密地镜像googleappengine数据存储。在

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

Low memory usage

这与您希望在数据库中实现的功能正好相反;您需要尽可能多地将数据集存储在核心内存中;这可能意味着调整数据集本身以有效地适应,或者添加memcached节点,以便您可以将数据集分布在多个主机上,以便每个主机都有足够小的数据集部分,以满足它的需要在核心。在

为了深入了解这一点,考虑一下从ram读取一个值比从磁盘读取快1000倍;一个能够满足来自core的每个查询的数据库可以处理10倍于只访问磁盘1%查询的数据库的工作负载。在

I'm planning to have a huge dataset around 10GB.

我不认为10GB可以称为“巨大的数据集”。事实上,这可能适合一个相当大的数据库服务器的ram;您不需要超过一个memcached节点,更不用说额外的持久性节点了(典型的磁盘大小以tb为单位,比预期的数据集大100倍)。在


基于这些信息,我绝对建议您使用像PostgreSQL这样的成熟数据库产品,它可以为您描述的数据提供足够的性能,并且可以轻松地提供您所谈论的所有特性。如果到了需要扩展到PostgreSQL实际能够提供的范围的时候,那么实际上需要分析真正的工作负载,以了解真正的瓶颈是什么。在

相关问题 更多 >

    热门问题