KANG's BLOG

Let's have some fun

数据复制

1 复制的意义 高可用性 当一个数据节点出现问题不能响应请求时,系统仍可以通过将请求打到其他数据节点上来保证系统的整体可用性。 低延迟 当系统为广泛地域提供服务时,可以将用户的请求分发到空间距离较近的数据中心以提供较低延迟的服务。 可扩展性 当请求并发量增长到单机无法承受时,多节点分摊请写压力成为必然的选择。 2 复制方式 2.

数据库的索引类别

一、哈希索引 由于Hash查询时O(1)的特性,非常适合用来缩短查询路径。 数据插入时,不断append到一个文件中,这个文件可以是CSV,也可以是二进制格式。然后在内存中记录这条数据的K-V对,key是数据的查询键,value是数据在文档中的偏移量。 对原始数据更新也不会定位到原来的数据位置,而是将索引指向数据在文件中新追加的位置,所以文件通常采用分段的方式,不断的压缩合并,来释放磁盘空间。 并发控制 一写多读:对于文件的追加,只能有一个写线程;而由于文件不可变的特性,可以采用多线程读取的方式。 删除记录 删除数据时,实际上是一个插入动作,在数据文件中追加特殊的删除记录,也叫墓碑(tombstone),等到执行合并时,如果发现墓碑标记的key,则删除该key在数据文件中所有对应的数据。 崩溃恢复 通常会将整张哈希表的快照定时持久化到磁盘上。

分布式数据库架构类别和主流方案

一、分布式场景下数据库架构方式 1. Share nothing 顾名思义,就是什么都不共享。 Mysql 的分库分表和大部分的Nosql都是这样的方案,底层实际上完全分离,节点之间单独计算,不共享数据。 好处很明显,设计简单,扩展灵活,并行度较高。 缺点也很明显,跨分片查询困难,数据一致性难以保证。 能够实现强一致的只有zookeeper这种轻量级的分布式存储框架,但是它是牺牲了可用性的前提来保证的一致性,这也是Kafka和Dubbo这种主流中间件在逐渐抛弃zookeeper的原因,详见Zab1.0。

数据库类型和查询语言的分类

关系型数据库和文档型数据库差别 1. 数据联结 在表示一对一和一对多的数据联结上,二者差别在于存储方式不同: 关系型数据库通过数据键联结,文档型数据库通常采用嵌套的方式将相关数据存储在一起。 表示多对一和多对多时,也没有明显不同:都是采用唯一标识符来进行引用。该标识符在关系模型中称为外键,在文档模型中称为文档引用。 2. 查询场景不同带来的性能差异 存储方式的不同,也带来查询性能的不同: 如果查询某项业务相关的完整数据,在关系型数据库中,多表关联需要对多棵树进行查询,但对于文档型数据库仅需要查询当前数据即可。