写入缩放是一个难题。也许,写入缩放的秘诀在于读取缩放。也就是尽可能多的缓存读取,让写入得到所有的吞吐量。
话虽如此,有很多事情可以做:
1) 从数据模型开始。设计一个数据模型,以便您永远不会删除或更新表。唯一的操作是插入。使用生效日期、生效顺序和生效状态,仅使用插入命令即可实现插入、更新和删除操作。这个概念称为 Append Only 模型。结帐 RethinkDB..
2) 将并发插入标志设置为 1。这可确保在读取过程中表继续插入。
3) 当尾部只有 Insert 时,可能不需要行级锁。所以,使用 MyISAM(这不是要从 InnoDB 中拿走任何东西,我稍后会谈到)。
4) 如果这一切都没有多大作用,请在 Memory Engine 中创建一个副本表。如果您有一个名为 MY_DATA 的表,请在内存表中创建一个名为 MY_DATA_MEM 的表。
5) 将所有插入重定向到 MEM 表。创建一个合并两个表的视图并将该视图用作您的读取源。
6) 编写一个守护进程,定期将 MEM 内容移动到 Main 表并从 Mem 表中删除。将 MOVE 操作实现为 Mem 表上的 Delete 触发器可能是理想的(我希望在 Memory Engine 上可以使用触发器,但不完全确定)。
7) 不要对 MEM 表进行任何删除或更新(它们很慢)还要注意表中键的基数(HASH vs B-Tree : Low Card -> Hash, High Card-> B树)
8) 即使以上所有方法都不起作用,也要抛弃 jdbc/odbc。转移到 InnoDB 并使用 Handler Socket 接口进行直接插入(Google for Yoshinori-San MySQL)
我自己没有使用过 HS,但基准测试令人印象深刻。 Google Code 上还有一个 Java HS 项目。
希望对您有所帮助..