我有一个在 EC2 上运行的写入密集型应用程序。关于如何优化它以便能够在 MySQL 数据库上进行数千个并发写入有什么想法吗?
写缩放是一个难题。也许,写入缩放的秘密在于读取缩放。即缓存尽可能多地读取,以便写入获得所有吞吐量。
话虽如此,人们可以做很多事情:
1)从数据模型开始。设计一个数据模型,以便您永远不会删除或更新表。唯一的操作是插入。使用生效日期、生效顺序和生效状态,仅使用插入命令即可实现插入、更新和删除操作。这个概念称为仅追加模型。检查 RethinkDB..
2) 将并发插入标志设置为 1。这可确保表在读取过程中保持插入。
3)当你只有尾部插入时,你可能不需要行级锁。因此,使用 MyISAM(这并不是要从 InnoDB 中拿走任何东西,我稍后会谈到)。
4) 如果这一切都没有多大作用,请在内存引擎中创建一个副本表。如果您有一个名为 MY_DATA 的表,请在内存表中创建一个名为 MY_DATA_MEM 的表。
5) 将所有插入重定向到MEM 表。创建一个联合两个表的视图,并使用该视图作为您的读取源。
6) 编写一个守护程序,定期将 MEM 内容移至 Main 表并从 Mem 表中删除。将 MOVE 操作实现为 Mem 表上的删除触发器可能是理想的选择(我希望触发器可以在内存引擎上实现,但不完全确定)。
7) 不要对 MEM 表进行任何删除或更新(它们很慢)还要注意表中键的基数(HASH 与 B-Tree :低卡 -> 哈希,高卡 -> B-Tree )
8) 即使上述所有方法都不起作用,请放弃 jdbc/odbc。转移到 InnoDB 并使用 Handler Socket 接口进行直接插入(Google for Yoshinori-San MySQL)
我自己没有使用过 HS,但基准测试令人印象深刻。Google Code 上甚至还有一个 Java HS 项目。
希望有帮助..
| 归档时间: |
|
| 查看次数: |
1762 次 |
| 最近记录: |