Python 高容量数据库写入的设置

Python 高容量数据库写入的设置,python,django,database-design,amazon-web-services,Python,Django,Database Design,Amazon Web Services,我正在研究一个每分钟需要数百次数据库写入的项目。我以前从未处理过这种级别的数据写入,我正在寻找良好的可扩展技术 我是一名舒适的python开发人员,拥有django和sql炼金术方面的经验。我想我会在django上构建数据接口,但我不认为通过orm来完成所需的数据写入量是个好主意。我绝对愿意学习新技术 该解决方案将在Amazon web服务上运行,因此我可以访问他们的所有工具。最终,我在寻找关于数据库选择、数据编写技术以及我可能没有意识到的任何其他需求的建议 关于从哪里开始有什么建议吗 谢谢,

我正在研究一个每分钟需要数百次数据库写入的项目。我以前从未处理过这种级别的数据写入,我正在寻找良好的可扩展技术

我是一名舒适的python开发人员,拥有django和sql炼金术方面的经验。我想我会在django上构建数据接口,但我不认为通过orm来完成所需的数据写入量是个好主意。我绝对愿意学习新技术

该解决方案将在Amazon web服务上运行,因此我可以访问他们的所有工具。最终,我在寻找关于数据库选择、数据编写技术以及我可能没有意识到的任何其他需求的建议

关于从哪里开始有什么建议吗

谢谢,
CG

跟随潮流,换句话说,进入NOSQL的世界。一些有价值的技术包括和。它们真的很快,可扩展,并且有像样的python驱动程序。例如,mongodb与django的配合非常好,与传统SQL有很多共同之处,比如MySQL。另一方面,redis有更多的“原始”数据结构,但在速度方面更为优越(当然这在某种程度上取决于驱动因素)。使用它们中的任何一个(或者两者都使用,这是一个很好的想法,因为这是一件光荣的事情)你可以自由地(有时是强制的)编写自己的“低级”逻辑来完成你的需求

实际上,通过SQLAlchemy,每分钟写几百次应该没问题(每秒只有几次);如果你说的更像是一分钟一千次,那可能会有问题

你有什么样的数据?如果它相当平坦(很少有表,很少有关系),那么您可能需要研究非关系数据库,例如CouchDB或Mongo。如果您想使用SQL,我强烈推荐PostgreSQL,它似乎比MySQL更好地处理大型数据库和频繁写入

这还取决于插入的数据有多复杂


我认为不幸的是,您将不得不尝试一些事情并运行基准测试,因为每种情况都不同,查询优化器基本上是神奇的。

如果只有几百次写入,您仍然可以使用关系数据库。我会选择PostgreSQL(8.0+), 它有一个单独的后台编写程序。它还具有可调整的序列化级别,因此 可以在速度和严格的ACID遵从性之间实现一些折衷,有些甚至在事务级别

Postgres有很好的文档记录,但它假设对SQL和关系数据库理论有更深入的理解,才能充分理解并充分利用它

另一种选择是新型的“无SQL”系统,它可能扩展得更好,但代价是要购买一个完全不同的技术系统


无论如何,如果您使用的是python,并且在关机或断电时丢失写操作不是100%关键,并且您需要低延迟,请使用线程安全队列。队列和工作线程将写操作与主应用程序线程解耦。

我不会说“玩得很好”它能工作吗?使用mongo是否仍然缺乏对管理员的支持?还需要牺牲一些orm功能吗?总有一个权衡。我坚信社会正处于动荡之中,因此一些小缺点(由于不成熟)很快就会得到解决。当然,mongo目前还不能提供管理员支持。是的,你必须编写一些定制的orm客户端代码,但是你会在速度方面得到回报。这真的取决于应用程序。我不习惯使用管理员来获取这些数据。然而,我需要能够通过模板代码获得它。我正在考虑一个无sql选项,我很好奇是否有一个特定的包可以以类似于django的orm的方式简化数据库查询。另外,您是否建议直接使用数据库进行写操作,或者我是否应该查看一个插件来帮助进行写操作。有关于python lazyboy的经验吗?没有关于lazyboy的经验,但是mongoengine对于django来说是一个不错的orm(或者更好的drm)。试试看!你能给我们更多关于你的实际使用模式的信息吗?如果你只是在写,而且从不需要阅读,那么
/dev/null
就是你选择的数据库…我会记录一些数据,比如小部件在哪里运行以及运行了多少次,我会使用urchin或其他一些跟踪工具,但最终我希望能够利用这些数据进行描述。我将从每分钟数百个开始,但我希望在未来实现最终的可扩展性。数据一开始是非常直接的,只存储发生在哪里的内容。我最终将使用它来提供上下文建议。这可能是一件值得测试的好事情,因为据我所知,SQLAlchemy在2K/分钟时是可以的。。。我只是没有超过10/秒的个人经验。因为你不能准确预测未来,从你知道的和现在有效的开始,这就是炼金术。使用即席查询也可以更好地探索SQL存储。但是,将炼金术保留在一些API抽象背后,以便以后可以替换它。请参阅我关于使用队列和线程的回答。