好的,所以这将是一个推测性问题,主要是面向设计的,而且是一个相当长的问题。如果我是你,我会喝杯咖啡。
前言:所以我一直在研究数据库,想要一个非常快速(就像真的一样)的数据库(引擎),具有以下必备条件,
- 酸合规
- In-Memory-ish 用于超快的 IO。
- 持久性(嗯......呃)
- 可扩展为集群/主从/等
- 高可用性(HA)
- MySQL直接替换
- 开源
- 应在商品服务器 (IYKWIM) 上运行
所以从我过于乐观的要求列表来看,你已经跳到......嗯
好吧,开个玩笑吧,我知道如果innodb_buffer_pool_size
调整得当,大部分时间它都会用完内存,但我说
它不是在内存中哟!
但是你会说嘿,它的 2k18 人可能已经创建了一些 100% 的内存数据库,对吧?嗯...实际上他们有,但每个人都有自己的权衡。
VoltDB Community Edition 一切似乎都很好,直到您意识到它不是替代品。它需要 java 中的一些存储过程式命令,这需要您重写整个应用程序或至少 php 应用程序的 db 层/驱动程序/等。所以?交易破坏者!
MemSQL ,嗯,这似乎是我们“有史以来最佳开源内存可扩展 SQL Acid DB ”竞赛的有力竞争者。只为,memSQL 老大就像...
不用说,memSQL 至少需要 4 个内核和 8Gigs 的 RAM,推荐的4 个内核和每个内核32 gigs 是非常疯狂的!!!!此外,memSQL 的社区版本(顺便说一句,它不是完全开源的!它只是免费的)不支持高可用性,因为它是一项付费功能。还有它的NoSQL。所以?交易破坏者!
- 所有其他 NoSQLish 数据库,如 membase、Redis、Memcached 等,都被排除在外。
所以现在我的天才想法!
我想知道我们是否可以运行一个 XtraDB/Galera 集群,所有实例都从带有常规快照的RAMDisc运行?
它勾选了所有复选框。
听我说完,首先向房间里的大象讲话,我们知道从 RAMDiscs 运行完整的 mysql Dbs 是相当嗯......大胆,用最礼貌的方式。那么如果服务器崩溃/关闭/等等我们会丢失一个节点会发生什么。虽然我们所有的 DB Cluster 作为一个整体仍然活着并且在踢**。我们所要做的就是从上一个快照启动数据库并与集群同步回来,顺便说一句,集群本身就非常擅长!
好吧,伙计们,不要对我太过挑剔,如果你发现我的实现有缺陷,请指导我。
好的,3 个 Galera 节点,其中:
笔记:
(编辑以解决@RickJames 的评论,以及更多关于 NDB Cluster 和一般改进的内容。)
你的计划有几个问题:
如果您想要持久性,那么显然您不能将 RAM 磁盘用于数据文件。
如果您计划为所有数据库文件(表数据文件、日志文件、临时文件等)使用 RAM 磁盘,那么您似乎需要内存所需的 RAM 量的两倍以上-只有数据库系统,因为您将表本身和它们的数据文件(通常会持久保存到磁盘)存储在 RAM 中。
您将如何保证 RAM 磁盘对于所有可能的用例都足够大?例如,当查询太大而无法在内存中处理时,可以创建磁盘内部临时表。因此,如果您使用 RAM 磁盘作为磁盘存储,那么您就有可能用完“磁盘”,这可能会产生一些不利影响。(这让我认为 MemSQL 有如此大的 RAM 需求是有充分理由的......)
也许有一种方法可以配置您的存储/RAM 磁盘,以便部分存储在 RAM 磁盘上(首先使用/首选的部分),另一部分在真实磁盘上?
也就是说,有些情况下 InnoDB 会创建磁盘上的临时表,即使查询可能已在内存中处理。有关详细信息,请参见8.4.4 MySQL中内部临时表的使用。在这些情况下,RAM 磁盘可能会有所帮助。这是一篇关于如何将MySQL tmpdir 放在 RAM-disk 上的博客条目(自 2012 年起) 。
但是,在 RAM 磁盘解决方案中用于 tmpdir 的任何 RAM 都是可能已用于最重要的 InnoDB 缓冲池的 RAM。因此,在考虑使用 RAM 磁盘上的任何 RAM 之前,请确保您有足够大的缓冲池来容纳数据工作集。
假设您将表的数据文件放在 RAM 磁盘上并计划对其进行快照,那么您还需要采取措施确保获得时间点一致的备份。这些步骤会使 RAM 磁盘变慢。
因此,或者不使用 RAM 磁盘,您可以按原样使用 Galera,但要采取一切可能的预防措施来避免创建磁盘内部临时表。显然,您还应该确保使用 SSD 而不是旋转磁盘。
另一个要考虑的技术可能是MySQL NDB Cluster:
NDB Cluster 确实非常快,2015 年 2 月报告了 2 亿 (NoSQL) QPS,请参阅MySQL Cluster Benchmarks。让我担心的是,他们在 2018 年仍在使用这些基准,好像自 2015 年以来没有取得任何进展。我也感觉到,无论出于何种原因,与 Galera 和其他解决方案相比,NDB Cluster 的受欢迎程度正在下降. (例如,参见 DBA.SE 上各种标签的统计信息。)