数据库
首页 > 数据库> > 在mysql中使用read replication

在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:

  1. Have a master DB with index on id only. Have a retention of 60 days.
  2. Have Read Replica DB. This DB will be indexed on many columns
  3. 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