我正在编写一个存储数据的代码,并希望存储10亿到10亿条logging甚至更多。 最重要的是速度(近似10000 – 20000 /logging每秒),SPACE使用和CRASH打样。 现在我一直在玩MySQL MyISAM,它的工作速度非常快,并且符合我们所需要的速度。 MyISAM也具有最佳的SPACE使用率,MySQL数据文件夹中的数据库文件几乎等于我插入的数据量,例如,对于每个30个字符的100000条logging,只需要3MB。 但唯一的问题是,它不是ACID,并可能导致数据丢失的崩溃。
所以我想知道任何替代品(我甚至不介意将数据库软件改为其他任何东西),这可以帮助我们存储如此多的数据并将其存储在FAST中。
我已经尝试MySQL INNODB,它的插入非常缓慢。 我每秒只能达到800-1000个/logging。 INNODB中存储数据的空间也非常大。 存储每个30个字符的相同的100000条logging需要将近8 MB。
我也尝试了MongoDB作为替代scheme,但是它又需要太多空间来存储相同的数据。
即使SQLITE3数据库是非常非常慢写100000条logging。 我在for循环中用PHP试了一下。 它也错过了20个logging,并给出了数据库不可用的错误。
所以我想知道任何可以满足我的要求的开源数据库软件。 我听说MariaDB的ARIA符合ACID标准。 这是真的吗? 或者,PostgreSQL也是一个很好的select,具有最佳的空间利用率。
我对任何FAST解决scheme都是开放的,利用最佳空间并且是防止破坏。 期待回复。
===更新MariaDB咏叹调===它甚至比插入速度和空间的InnoDB还差。 它比InnoDB花费了1.5倍的时间来插入相同的数据和MyISAM使用的近2.5倍的空间。
这不是任何人在5分钟内100%“钉子”的事情,但如果你想要达到这样的性能和function水平,那么我强烈怀疑你将不得不花钱。
如果您有这方面的预算,那么我会考虑将Oracle的“TimesTen”引擎,可能与企业级SSD或PCIe闪存(如FusionIO)结合起来,如果你走得太远,我推荐使用Intel Xeon E7-xxxx系列,因为它们具有出色的RRASfunction,可以在发生故障时尽可能长时间地保持服务器正常运行。
如果获得更多的function和更好的performance只是使用不同的软件的问题,那么每个人都会这样做(至less还有less数人还在IT上)
如果你需要ACID支持 – 那么为什么要尝试mongoDB?
使用innodb(但是myisam更快)可以获得所需的吞吐量,只要您在硬件上花费足够的时间并正确调整系统即可。 但是,你的第一个约束是尽量减less占用空间,这意味着你没有预算去购买SSD RAID。
可能会导致数据丢失的崩溃
我已经看到甲骨文和Sybase的崩溃数据丢失 – 但是从理论上讲,这些数据应该更加强大。 我通常会花费一些时间,精力和金钱来避免首先出现的故障(专用服务器,使用合理质量的硬件,UPS,稳定的软件)。
即使SQLITE3数据库是非常非常慢
SQLite对底层文件系统特别敏感(但这会影响所有的数据库)。 你没有提到它运行的是什么文件系统(甚至是哪个操作系统),这让我觉得你没有花很多时间来调整安装。
如果是我,我会看看MariaDB – 这是一个mysql的分支,包括改进的ISAM引擎( Aria ),它具有一些性能优势并支持事务。 (在Linux上运行,使用nobarriers和截止date调度程序的xfs)。
但是你需要看看你的硬件才能真正实现飞行。
从我的经验来看,InnoDB(如果configuration正确和使用的话)只比MyISAM慢一些(当然不是一个数量级)。 我想到了一些提高性能的build议:
你会在这里find好的指针:
有很多参数可以用来调整innodb。 myisam的数据量是不合适的 – 例如它需要在发生崩溃后进行修复。
看看mysqltuner或percona的sqlconfiguration向导 ; 在它上面扔很多ram和快速的io子系统,innodb可以给你很好的performance。
innodb允许实时压缩数据 。 它不会让事情变得更快,但可以为您节省一些存储空间。
不pipeselect的数据库引擎如何
一个非常非常非常快速的DB: MemSQL