我正在研究一项每分钟需要数百次数据库写入的项目。我以前从未处理过这种级别的数据写入,而且我正在寻找良好的可扩展技术和技术。
我是一名舒适的python开发人员,拥有django和sql炼金术方面的经验。我想我会在django上构建数据接口,但我不认为通过orm来完成我需要的大量数据写入是个好主意。我绝对愿意学习新技术。
该解决方案将在Amazon Web服务上运行,因此我可以访问他们的所有工具。最终,我正在寻找有关数据库选择,数据写入技术以及我可能没有意识到的任何其他需求的建议。
关于从哪里开始的任何建议?
谢谢, CG
答案 0 :(得分:0)
跟随趋势,换句话说,进入NOSQL的世界。一些值得的技术包括mongodb和redis。它们非常快速,可扩展,并且具有不错的python驱动程序。例如,mongodb对django起到了很好的作用,并且与传统的SQL有许多共同点,比如MySQL。另一方面,redis具有更“原始”的数据结构,但在速度方面更优越(当然这在某种程度上取决于驱动程序)。使用它们中的任何一个(或两者兼而有之,这是一个聪明的想法)你可以自由(有时强制执行)编写自己的“低级”逻辑来满足你的需求。
答案 1 :(得分:0)
你应该通过SQLAlchemy每分钟写入数百次(实际上只有几秒钟);如果你说的话更像一分钟,那可能会有问题。
你有什么样的数据?如果它相当平坦(几个表,几个关系),您可能想要调查非关系数据库,如CouchDB或Mongo。如果你想使用SQL,我强烈推荐PostgreSQL,它似乎处理大型数据库和频繁写入比MySQL好很多。
这还取决于您插入数据的复杂程度。
我认为不幸的是,你只需要尝试一些事情并运行基准测试,因为每种情况都不同,查询优化器基本上是神奇的。
答案 2 :(得分:0)
如果它只是几百次写入,你仍然可以使用关系数据库。我选择PostgreSQL(8.0+), 它有一个单独的后台编写器进程。它还具有可调整的序列化级别,因此您 可以在速度和严格的ACID合规性之间进行一些权衡,有些甚至在交易级别。
Postgres有很好的文档记录,但它假设对SQL和关系数据库理论有了更深入的了解,以便充分理解并充分利用它。
另一种选择是新的“NO-SQL”系统,它可能会更好地扩展,但代价是购买一个非常不同的技术系统。
无论如何,如果你正在使用python并且在关机或断电时失去写入并不是100%至关重要,并且你需要低延迟,请使用线程安全的Queue.Queue和工作线程来解耦你的主要写入申请线程。