当前位置:  开发笔记 > 编程语言 > 正文

DB具有最佳插入/秒性能?

如何解决《DB具有最佳插入/秒性能?》经验,为你挑选了4个好方法。

我们部署了一个基于AJAX的Instant Messenger,它由Comet服务器提供服务.我们要求将已发送的消息存储在数据库中以进行长期存档,以满足法律保留要求.

哪个数据库引擎在此一次写入,从不读取(极少数例外)要求中提供最佳性能?

我们需要至少5000插入/秒.我假设MySQL和PostgreSQL都不能满足这些要求.

有关更高性能解决方案的任何建议?HamsterDB,SQLite,MongoDB ......?



1> Nenad..:

请忽略上面的Benchmark我们内部有一个bug.

我们使用以下列插入1M记录:id(int),status(int),message(140 char,random).所有测试都是在带有500 GB Sata Disk的台式PC i5上使用C++驱动程序完成的.

MongoDB的基准测试:

1M记录插入没有索引

time: 23s, insert/s: 43478

1M记录在Id上插入索引

time: 50s, insert/s: 20000

接下来,我们将1M记录添加到具有Index和1M记录的同一个表中

time: 78s, insert/s: 12820

所有这些都导致了fs上的4gb文件.

MySQL基准测试:

1M记录插入没有索引

time: 49s, insert/s: 20408

1M记录插入索引

time: 56s, insert/s: 17857

接下来,我们将1M记录添加到具有Index和1M记录的同一个表中

time: 56s, insert/s: 17857

完全相同的性能,没有损失mysql的增长

我们看到Mongo在这次测试中吃了大约384 MB Ram,加载了cpu的3个核心,MySQL很满意14 MB并且只加载了1个核心.

Edorian提出了正确的建议,我将做更多的Benchmark,我相信我们可以达到2x四核服务器50K插件/秒.

我认为MySQL将是正确的方法.



2> Alexander Kj..:

如果你永远不会查询数据,那么我根本不会将它存储到数据库中,你永远不会打败将它们写入平面文件的性能.

您可能需要考虑的是缩放问题,当将数据写入平面文件的速度慢时会发生什么,您是否会投资更快的磁盘或其他内容.

另一件需要考虑的事情是如何扩展服务,以便您可以添加更多服务器,而无需协调每个服务器的日志并手动合并它们.

编辑:您写道,您希望在数据库中拥有它,然后我还会考虑安全问题,因为您的服务遭到入侵后会发生什么情况,您希望攻击者能够改变历史记录吗?有什么说的?

将它临时存储到文件中可能更为明智,然后将其转储到异地,如果您的Internet前端被黑客攻击则无法访问该位置.


实际上,具有日志轮换的日志文件是一个解决的艺术.可靠的数据库扩展只能在高端市场上解决,即便如此,我个人使用它的经验表明它通常配置错误而且工作不正常.平面文件总是会非常快.

3> jmz..:

如果您不需要进行查询,那么数据库就不是您所需要的.使用日志文件.



4> Frank Heiken..:

它仅出于法律原因而存储.

那详细的要求呢?你提到NoSQL解决方案,但是这些不能保证数据真的存储在磁盘上.在PostgreSQL中,一切都是事务安全的,因此您100%确定数据在磁盘上并且可用.(只是不要转向fsync)

速度与您的硬件,配置和应用程序有很大关系.PostgreSQL每秒可以在良好的硬件上插入数千条记录并使用正确的配置,使用相同的硬件但在应用程序中使用简单的愚蠢配置和/或错误的方法可能会非常慢.单个INSERT很慢,单个事务中的许多INSERT都快得多,准备好的语句更快,COPY在你需要速度时也很神奇.由你决定.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有