2016 - 2024

感恩一路有你

mongodb分布式 MySQL分库分表之后,id主键如何处理?

浏览量:1571 时间:2021-03-13 05:51:14 作者:admin

MySQL分库分表之后,id主键如何处理?

我将从存在的问题和如何做中回答这个问题。。

没有办法避免这个问题,通常拆分SQL,使用多个查询,然后使用结果分别检查结果

!我们可以使用TCC编程模型来确保两个事务可以正确提交,但这种代码入侵方式相对较重!您还可以使用基于消息的数据一致性保证

!1. 使用多线程分别查询多个节点,然后汇总

mysql表数据量太大,达到了1亿多条数据,除了分库分表之外,还有没有其他的解决方式?

在正常配置下,MySQL只能承载2000万数据(同时读写,表中有大文本字段,单服务器)。现在已经超过1亿,而且还在增加,建议按以下方式处理:

1子表。它可以按时间或一定的规则进行拆分,以便尽可能地查询子表中的数据库。这是最有效的方法。特别是写,放入一个新表,并定期同步。如果记录不断更新,最好将写入的数据放在redis中,并定期同步表3的大文本字段,将它们分隔成一个新的独立表。对于较大的文本字段,可以使用NoSQL数据库

4优化体系结构,或者优化SQL查询,避免联合表查询,尽量不要使用count(*)、in、recursion等性能消耗语句

5使用内存缓存,或者在前端读取时增加缓存数据库。重复读取时,直接从缓存中读取。

以上是一种低成本的管理方法,基本上几个服务器就可以做到,但是管理起来有点麻烦。

当然,如果整体数据量特别大,而且你不在乎投资成本,可以使用cluster或tidb

子数据库和子表是一种相对落后的优化方法,因为成本相对较高。

遇到数据库瓶颈:

-首先考虑SQL优化,这是最简单的方法。对现有系统没有影响。

-第二个是考虑数据库读写分离,这也是一个相对简单的方法。在数据库级配置中,系统级只需要调整获取数据库连接的逻辑即可。读取数据时,可以同时获得主库和从库连接。写入数据时,仅获取主库连接。

-考虑添加缓存层。数据缓存在缓存中,再次访问时不再从数据库检索。通常,缓存层对系统是透明的,对系统本身没有影响。但是,cache的引入也引入了相应的需要考虑的问题,如雪崩、命中率、分布式cache等]-还有一种非技术手段,就是改变需求。性能问题的原因是否不合理?还是要求太复杂?需求可以简化吗?这种方法对系统的影响相对较小。

-最后,考虑子数据库和子表。优先考虑子数据库,因为它比子表简单。将相应的表移动到新的数据库中,并调整系统的逻辑以获得数据库连接。在这里,我们需要考虑移动哪些表。在提高性能的前提下,我们首先尝试避免分布式事务。

-最后,考虑子表。子表的主要原因是单个表中的数据量很大。子表分为纵断面和横断面。垂直剪切是按列剪切的,例如用户表。常用信息为基本信息表,其他信息为明细表。横切是按行切割。例如,一个有1亿数据的表被分成10个有1000万数据的表。这涉及到数据应该存储在哪个表中或从哪个表中获取。在表被划分之后,可以对数据库进行进一步的优化。

-如果涉及分布式事务,应考虑如何保证分布式事务。理论上,2个,3个,帕克斯,帽子,底座。相应中间件的使用。

系统的设计和优化不是模仿的问题,而是需要根据实际场景进行处理。

当数据库扼住系统性能咽喉,直接分库分表能解决吗?

学习本身就是一个循序渐进的过程,PHP入门简单,精通也需要循序渐进。

1. 从一个简单的框架开始,比如ThinkPHP,从CMS开始,推荐thinkcmf。它们都是中国人的作品,材料不需要翻译。

2. HTML、CSS和JavaScript都需要涉猎。JQuery,一个早期的框架,今天仍然很有用,而且尖端技术仍然需要掌握angular、js和Vue。也有相似之处余烬.js、主干等,前端框架最凌乱。ES6和ES7的语法仍在改进中。不要贪心,一步一步地去了解它。

3. 终极框架推荐国外最流行的laravel。它模仿ruby的设计理念,与Java类似。它将设计模式发挥到了极致。因此,掌握这个框架主要集中在控制反转(IOC)、依赖注入(DI)上,这实际上是工厂模式和接口(laravel中的契约)。实现技术使用PHP的魔术方法(比如静态调用)和反射机制来实现优雅,被称为Web艺术家的框架。

4. Mysql,mongodb慢查询优化,缓存设计,子数据库,子表,分片设计,SQL优化。大约是半分贝。

5. 异步消息队列的使用,如Beanstalk或rabbitmq。Redis使用Memcache,结合特定的业务场景,具有处理高并发架构的能力。

6. Lamp/LNMP部署,包括应用集群、数据库集群、MQ和redis缓存集群部署。大约是Devops的一半。

技术的最终目标是成为一名优秀的架构师。它是综合能力的培养,是新知识的学习能力,是解决商业问题的能力。我不认为许信辰已经掌握了以上这么多。他在底层、PHP内核、C扩展等方面比较精通,但他非常成功。也有spool和workman的作者,但是在社区中建立这种威望也是必要的,这需要付出很多代价。如果你想成为一名技术大师,这个过程是必不可少的。

手机打字不容易。我也是一个php程序员和标题作家。我会定期在专栏里发一些技术文章。欢迎你关注我。我们也欢迎更正上述评论。

mongodb分布式 saas 多租户 微服务架构 mongodb有必要分表吗

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。