分布式用户
将很多的用户分布在不同的服务器节点上,达到负载均衡。
用户访问服务器,会话保持的session数据怎么存储?
如下:若第一次访问被分配到8080节点,并在该节点保存session数据,第二次被分配到8081节点,那么第二次怎么读取session?(进程间的通信相当的缓慢)
解决方案:节点集群 增加共享缓存
分布式系统
将一个系统划分成多个子系统,并放入多台计算机。
- 一台机器上的服务
为避免前端服务影响后端服务,将后端服务分离出来,放到另一台计算机,且该计算机放到另一个网络中(防止带宽抢占的影响) - 分布式的服务
- 客户端的负载均衡
Hbase
分布式、可扩展、支持海量数据存储的Nosql 数据库,面向列存储。
hdfs----->类似txt/csv文件系统,读写效率低
Hbase---->数据库系统,结构化的数据,读写效率高
MySQL数据库的表:
面向行存储—>一行数据–>一个内存块---->便于查询
问题1:列很多!
解决方案:垂直拆分
user_basic
user_info
两个表1V1关系
问题2:行很多!–>高表
不同的数据库,对sql语句的解析方式不同,MySQL从前向后,oracle从后向前。
如:
select * from user_t where name = “jack” and addr = “A”
mysql 会先匹配name列,然后addr列,共匹配12+1次
oracle 则先addr,再name,共匹配12+4次
高表水平拆分
问题3:动态增加一列,不好解决
问题4:存储容量上限
MySQL innodb 64T 的命名空间,超过则会效率低
MySQL myisam 256T单表空间,超过则效率低
综合以上---->面向列的存储:
一类的数据存入一块内存,便于统计分析,如年龄
写入数据时,先写入缓存,然后同步到Hbase中,为防止缓存数据丢失,同时写入预写日志