2.2.4 缓存集群
如果用户量越来越大,此时你可以不停的加机器,比如说系统层面不停加机器,就可以承载更高的并发请求 。然后数据库层面如果写入并发越来越高,就扩容加数据库服务器,通过分库分表是可以支持扩容机器的 , 如果数据库层面的读并发越来越高,就扩容加更多的从库 。但是这里有一个很大的问题:数据库其实本身不是用来承载高并发请求的,所以通常来说,数据库单机每秒承载的并发就在几千的数量级,而且数据库使用的机器都是比较高配置 , 比较昂贵的机器,成本很高 。如果你就是简单的不停的加机器,其实是不对的 。所以在高并发架构里通常都有缓存这个环节,缓存系统的设计就是为了承载高并发而生 。所以单机承载的并发量都在每秒几万 , 甚至每秒数十万 , 对高并发的承载能力比数据库系统要高出一到两个数量级 。所以你完全可以根据系统的业务特性 , 对那种写少读多的请求,引入缓存集群 。具体来说,就是在写数据库的时候同时写一份数据到缓存集群里,然后用缓存集群来承载大部分的读请求 。这样的话,通过缓存集群,就可以用更少的机器资源承载更高的并发 。
一个完整而复杂的高并发系统架构中 , 一定会包含:各种复杂的自研基础架构系统 。各种精妙的架构设计.因此一篇小文顶多具有抛砖引玉的效果,但是数据库优化的思想差不多就这些了.
mysql分表不均怎么解决数据分库表扩容-数据不均匀问题 原创
2021-12-22 22:18:13
?
这是王姑娘的微博 ?
码龄10年
关注
假如前期分三个库,一个库两个表,项目火爆,数据量激增,进行扩容
增加了新的数据库表位,会导致旧的库表比新的库表数据量多 , 且容易出现超载情况
?
解决方式思想:
不同的库表位分配的概率不一样 , 性能好的机器和数据量少的机器提高分配几率,类似的中间件应用场景有nginx
类似这种:
Nginx常见的负载均衡策略
节点轮询(默认)
weight 权重配置
简介:weight和访问比率成正比,数字越大,分配得到的流量越高
场景:服务器性能差异大的情况使用
upstream lbs {
server 192.168.159.133:8080 weight=5;
server 192.168.159.133:8081 weight=10;
}
在分库表中的加权解决方式,目前想到的几种方案:
库表位可以使用对象形式,配置权重,避免数据倾斜、数据集中(思考中...)
编写算法 , 根据不同的,配置权重,不同的库表位配置不同的权重(思考中...)
加权配置 , list重复添加出现的高频的库表位(更改速度最快)
例如:dbPrefixList.add("0"); dbPrefixList.add("1"); dbPrefixList.add("a");
这三个库是第一批增加的 , 已经到了900多万单表量 。现在准备进行扩容,那么实现方式如下:
扩容库位b,c,d
?
/**
* 获取随机的前缀
* @return
*/
public static String getRandomDBPrefix(){
int index = random.nextInt(dbPrefixList.size());
return dbPrefixList.get(index);
}
这样在获取随机库位的时候,0,1,a获取到的概率会低点,相对进入的数据就会少些 。更多数据会进入到b ,c,d中进行平衡 。
mysql中 varchar(20)我的数据长度超过了,varchar不是自动增长的吗 , 为什么他把后面超过的内容给截了 。mysql中 varchar(20)数据长度超过了是设置错误造成的 , 解决方法为:
1、通过my.ini(Linux下为my.cnf)的配置文件进行修改 。一般my.ini文件在安装文件的根目录下 。
推荐阅读
- 单机农场经营游戏,单机游戏农场经营模拟有哪些
- css本地字体加粗,css设置字体加粗
- Python爬虫库beautiful,python爬虫常用库
- 直播话术专场,直播话术讲解
- python2进制函数 python二进制运算符
- 华为2000什么手机好用,2000华为手机哪款最好用
- python函数占位符 python占位符%z
- ios系统更新时间点,苹果更新时间
- 直播王者用什么屏幕最好,直播王者用什么屏幕最好用