比较python中的持久存储解决方案

比较python中的持久存储解决方案,python,orm,persistence,Python,Orm,Persistence,我正在开始一个新的科学项目,它有很多数据(数百万条条目),我想以一种方便快捷的格式存储。我遇到了许多不同的潜在选择,但我不知道如何从中选择。我的数据可能只存储为一个字典,或者可能存储为一个字典字典。一些潜在的考虑因素: 速度。我不能每次启动新脚本时都从磁盘上加载所有数据,我希望尽可能快速地访问随机条目 易用性。这是python。存储应该像python一样 稳定性/成熟度。我想要一些目前支持的东西,尽管有些东西工作得很好,但仍在开发中 易于安装。我的系统管理员应该能够在我们的集群上运行它 我真

我正在开始一个新的科学项目,它有很多数据(数百万条条目),我想以一种方便快捷的格式存储。我遇到了许多不同的潜在选择,但我不知道如何从中选择。我的数据可能只存储为一个字典,或者可能存储为一个字典字典。一些潜在的考虑因素:

  • 速度。我不能每次启动新脚本时都从磁盘上加载所有数据,我希望尽可能快速地访问随机条目
  • 易用性。这是python。存储应该像python一样
  • 稳定性/成熟度。我想要一些目前支持的东西,尽管有些东西工作得很好,但仍在开发中
  • 易于安装。我的系统管理员应该能够在我们的集群上运行它
我真的不太关心存储的大小,但如果在这方面的选择真的很糟糕,这可能是一个考虑因素。另外,如果有必要,我很可能会创建一次数据库,然后只从中读取数据

我已经开始考虑一些可能的选择(见下文):

对我来说,哪一个可能更好,有什么建议吗?还有更好的主意吗?其中一些具有后端;关于哪个文件系统后端最好有什么建议吗?

RDBMS

没有什么比在著名的RDBMS上使用表更可靠的了。我想到了

这会自动为将来提供一些选择,比如集群。此外,您还可以自动使用许多工具来管理数据库,并且可以从其他几乎用任何语言编写的软件中使用它

它真的很快

在“感觉像python”这一点上,我可能会补充说,您可以使用ORM。强名称是。也许是“扩展”

使用sqlalchemy,您可以让用户/系统管理员选择要使用的数据库后端。也许他们已经安装了-没问题


RDBMS仍然是数据存储的最佳选择。

Sqlite——它与python一起提供,速度快,可广泛使用,易于维护

如果您只需要简单(类似dict)的访问机制,并且需要处理大量数据的效率,那么它可能是一个不错的选择。如果您打算使用numpy,那么它确实值得考虑。

使用RDBMS是可靠的、可扩展的和快速的


如果您需要一个更具scalabre特性的解决方案,并且不需要RDBMS的功能,那么可以使用具有良好python api的键值存储库,如couchdb。

可能需要试一试-PyMongo库与字典一起工作,并支持大多数python类型。易于安装,性能卓越且可扩展。MongoDB(和PyMongo)也用于一些大公司。

我正在从事这样一个项目,我正在使用

SQLite将所有内容存储在一个文件中,并且是的一部分。因此,安装和配置实际上是免费的(易于安装)

您可以使用小型Python脚本或通过各种工具轻松管理数据库文件。还有一个问题(易于安装/易于使用)

我发现使用SQL进行过滤/排序/操作非常方便。。。数据。虽然我不是SQL专家。(易于使用)

我不确定SQLite是否是这项工作的FASTESDB系统,它缺少一些您可能需要的功能,例如存储过程


无论如何,SQLite对我来说是可行的。

NEMO合作(在水下建造宇宙中微子探测器)也有很多相同的问题,他们使用mysql和postgresql没有重大问题。

如果你真的需要像字典一样的存储,一些新的键/值或列存储(如Cassandra或MongoDB)可能会提供比关系数据库更快的速度。当然,如果您决定使用RDBMS,SQLAlchemy是一个不错的选择(免责声明:我是它的创建者),但是如果您对关系查询或强酸性不感兴趣,那么您想要的特性列表似乎倾向于“我只想要一个感觉像Python的字典”,RDBMS的这些方面可能会感到麻烦。

这实际上取决于您正在尝试做什么。RDBMS是为关系数据设计的,因此,如果您的数据是关系数据,那么请使用各种SQL选项之一。但听起来您的数据更倾向于使用非常快速的随机GET操作的键值存储。如果是这样的话,请比较各种密钥存储的基准测试,重点关注获取速度。理想的键值存储将在内存中保留或缓存请求,并能够同时处理许多GET请求。实际上,您可能想要创建自己的基准测试套件,以便能够有效地比较随机并发GET操作

为什么需要集群?每个值的大小是否非常大?如果不是,您就不需要集群来处理一百万个条目的存储。但是,如果您正在存储大量数据,这很重要,并且您可能需要一些易于支持读取从属和/或透明分区的东西。一些键值存储是面向文档的和/或为存储更大的值而优化的。由于快速获取所需的索引开销,Redis在技术上对较大值的存储效率更高,但这并不一定意味着它更慢。事实上,额外的索引使查找更快


您是唯一能够真正回答这个问题的人,我强烈建议您准备一个定制的基准测试套件来测试实际使用场景中的可用选项。您从中获得的数据将比其他任何东西都更具洞察力。

好的,如果我朝这个方向走,我应该使用哪个界面?界面,如GUI?或者像在API-应用程序编程人员界面中一样?一个很好的数据库API是sqlalchemy-我已经更新了答案,说了一些关于它的话,并添加了一个网站链接。如果需要,请告诉我