有一个包含 5 个表的数据库 {MySql} A
, BIG
, C
, D
, E
。它们的生长因子约为1
/ 100
/ 1
/ 1
/ 1
。该表具有关于/ /的BIG
Insert/Read/Update 请求比率。插入和更新“不能失败”。1
10
2
表“BIG”具有以下数据:
- 它们在创建它们的同一天是关键的(从
ACID
观点来看,AC
它非常重要),2 天后它的关键性变得越来越小。 - 它们为其他一些表格(
F
、G
、...)中的统计信息提供了基础。有一些“数据泵”从 , 读取数据并将BIG
其写入。数据泵从 上读取大约 100 行,在 上写入大约 1 行,在 上写入 1 行,等等。在该操作之后,可以删除这些行。F
G
BIG
F
G
BIG
更多数字:对于大表,我预计:高峰日每天约 +2k 行,平均每天约 +0.5k 行。增长是周期性的:(即 mon=+0.5,...,wed=+0.5,sat=+1k,sun=+2k, mon=+0.5,...)因此我会激活清理每周一次的数据(即周一)
数据描述:它们基本上是需要“实时”(最多 1 小时)服务的用户请求。那些服务过的请求标记为已消费后,基本上不需要存储;我只需要对此做一些统计(也许在某一天之后,但不要着急)。
部署信息:部署在 Heroku 上,我会使用 MySql(据说擅长读取)或 Postgres(据说擅长更新?)对此有什么建议吗?
为了有效地管理数据库的可伸缩性,什么是好的选择?数据泵是一个好的解决方案吗?
我在考虑一个内存表BIG
,但据说它提供了一个很好的读取比率(就像它是一个缓存),那么插入和更新呢?还有其他选择吗?
请提供一些尺寸。
BIG
例如,删除行的时间有多大?其他表有多大?MEMORY
不一定比InnoDB
。由于表与行锁定,它可能会更慢。由于将 RAM 从 buffer_pool 中拿走,它可能会BIG
影响整体性能,从而减慢其他事情的速度。是的,拥有一个“登台”表是做某些事情的实用方法。对于真正高速的分段,两个表之间的乒乓可能是可取的。
PARTITION
到目前为止,您所描述的内容不太可能有用。请描述你有什么样的数据以及为什么它需要 AC 或 ACID(如果从数据中看不出来)。
编辑
谢谢。一分钟一行?直到每秒 100 次,事情才会变得令人兴奋。基于此,我希望 MySQL 或 Postgres 将其视为“微型”数据库。
我建议以对您来说最简单的方式进行。我没有预见到任何扩展/性能问题,至少在不久的将来不会。(我假设表上有足够的索引和合理的查询。)我对“泵”是什么仍然含糊不清,但这听起来没有必要。