好文章:http://blog.itpub.net/2673616...
问题:
(1)数据库数据缓存是什么意思?
(2)Join必须是一个数据库实例,数据库实例怎么理解,是指一个数据库进程吗?如何实现跨库JOIN?
(3)多个数据库实例是在同一台物理机器上,共享cpu和磁盘吗?
(4)分库之后,不同的库是在同一台机器,还是多台机器?
(5)数据库链接数,限制是多少,数据库可承载活跃连接数的阈值?这个连接数是数据库实例的维度的吗?
(6)网络IO瓶颈,请求的数据太多,网络带宽不够 ,对于网络宽带的理解??
(7)B树作为索引 相对 二叉树的优势
(8)hash-map的通俗解释,php数组空间的连续性??如何减少离散空间
(9)join 操作到底有多消耗cpu性能,Service层处理的话 效果会提升很多吗?
(10)今日头条分库的中间件?利用MyCat的详细分库分表步骤。
(11)基因法的详细解释,id生成常用 snowflake算法。
(12)非partition key的查询问题,通用的技术解决方案深入。非partition key跨库跨表分页查询问题;
(13)水平扩容库,水平扩容表的时候,因该怎么做?
(14)总结分库分表带来的问题:然后解决方案。


answer one:

数据库的缓存机制分为两个层面。

1.由数据库提供,可以对数据表建立的高速缓存。虽然数据库层做了对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,一般只有表中数据没有变更的时候,数据库对应的缓存才发挥了作用。有时并不能减少业务系统对数据库产生的增、删、查、改产生的庞大压力。

2.第三方工具,一般的做法是在数据库与业务服务器之间增加一个缓存服务器,比如我们熟悉的redis。

数据库缓存引发的问题:
(1)**数据的一致性**, 缓存和数据库之间。
(2)为了避免**缓存系统的单点**,衍生出的缓存集群架构等。

answer two:
为什么要避免甚至禁止跨库JOIN:
1.微服务,以及很多框架在设计的时候,都是秉着“高内聚,低耦合”的原则。将没有关系的模块,数据拆分开来,跨库join违背了这个原则;
2.同个库内,join操作 就会很消耗cpu和内存,跨库join会导致更加复杂的计算,对性能不友好。

如何避免跨库:

如果跨库再所难免,又有什么方法跨库:

全局表

有可能是系统中所有模块都可能会依赖的一些表,为了避免跨库join查询,可以将这类数据在每个数据库中都存储一份。因为这类数据一般很少发生修改,不用过于担心“一致性”。

字段冗余
时间换空间的一种做法,将本来需要通过join才可获取的字段数据,冗余一份,但是注意数据的一致性。

数据同步
生产一份中间表,定时同步原来需要join才可以得到的数据,因为数据同步本身就好性能,在性能和数据的时效性做平衡。可以将数据计算用大数据的计算框架实现,然后将数据同步到中间表。

等等等


阿阿阿黄
34 声望4 粉丝