在mysql中使用read replication
作者:互联网
我有一个mysql数据库,每天有大约1.5亿个插入,保留期约为60天.
>每条记录都以id为索引.
>每次更新发生如下:
>查看记录是否存在.如果是,请使用新数据更新相同内容.
>或者创建数据.
>删除60天前创建的记录.
我的主要用例如下:
运行一些批量查询.例如.:
Select (*) from table where prop=val1 and prop2=val2 etc
将返回大量的记录,例如. 1M
以下方法是好的:
>拥有一个只有id的索引的主DB.保留60天.
>拥有只读副本数据库.此DB将在许多列上编制索引
>将对只读副本数据库运行所有批量查询.
这是一个好的解决方案吗?
编辑:
我打算使用Amazon RDS DB并在他们的文档中找到它:
Q: Can my Read Replicas only accept database read operations?
只读副本旨在提供读取流量.但是,可能存在高级用户希望针对只读副本完成数据定义语言(DDL)SQL语句的用例.示例可能包括将数据库索引添加到用于业务报告的只读副本,而不将相同的索引添加到相应的源数据库实例.如果要为给定的只读副本启用读取以外的操作,则需要修改只读副本的活动数据库参数组,将“read_only”参数设置为“0”.
解决方法:
回答你的问题:
Is following approach good:
- Have a master DB with index on id only. Have a retention of 60 days.
- Have Read Replica DB. This DB will be indexed on many columns
- All bulk queries will be run against read replica DB.
Is this a good solution?
更新
在我看来和经验,没有.
从技术上讲,这种解决方案可能有效,但实际上不适合生产使用. mysql的内置主从复制仅在从数据库中的表与master数据库中的表具有相同布局时才有效.
您将拥有大约90亿条记录(150 x 60).我的估计是在磁盘上,这可能需要1TB(每个记录一条推文的大小). 1.5亿次插入和1.5亿次删除(过期记录)肯定会使索引碎片化,插入速度变慢,需要经常重新构建.
当您需要多个只读副本时,事物将变得越来越复杂,这是生态系统的自然演变.
如果每天有1.5亿次插入,则应考虑使用NOSQL数据库. Mongodb用于支持Innodb,不确定它是否仍然如此.
如果您希望坚持使用像MySQL这样的RDBMS,您应该使用诸如Database Sharding之类的策略.在此策略中,您可以按照负载分布在MySQL实例集群中的方式对数据进行分段.
比Sharding略低的可扩展性是使用诸如MyISAM之类的存储引擎.MyISAM不完全符合ACID,但提供了出色的性能.它支持并发插入.
标签:mysql,scaling,replication,database-replication 来源: https://codeday.me/bug/20190520/1141648.html