空白键|我要消灭一半程序员,10大高性能开发宝石( 四 )


Avro
支持语言:C、C++、Java、Python、C#等
动态性支持:好
是否包含RPC:是
简介:这是一个源自于Hadoop生态中的序列化框架 , 自带RPC框架 , 也可独立使用 。 相比前两位最大的优势就是支持动态数据解析 。
Protobuf和Thrift都需要通过“编译”将对应的数据协议定义文件编译成对应的C++/Java源代码 , 然后合入项目中一起编译 , 从而进行解析 。
当时 , Java项目组同学非常强硬的拒绝了这一做法 , 其理由是这样编译出来的强业务型代码融入他们的业务无关的框架服务 , 而业务是常变的 , 这样做不够优雅 。
最后 , 经过测试 , 最终选择了AVRO作为我们的方案 。 Java一侧只需要动态加载对应的数据格式文件 , 就能对拿到的数据进行解析 , 并且性能上还不错 。 (当然 , 对于C++一侧还是选择了提前编译的做法)
自从你的网站支持了动态能力 , 免不了要和数据库打交道 , 但随着用户的增长 , 你发现数据库的查询速度越来越慢 。
这个时候 , 你需要:
数据库索引技术
想想你手上有一本数学教材 , 但是目录被人给撕掉了 , 现在要你翻到讲三角函数的那一页 , 你该怎么办?
没有了目录 , 你只有两种办法 , 要么一页一页的翻 , 要么随机翻 , 直到找到三角函数的那一页 。
对于数据库也是一样的道理 , 如果我们的数据表没有“目录” , 那要查询满足条件的记录行 , 就得全表扫描 , 那可就恼火了 。 所以为了加快查询速度 , 得给数据表也设置目录 , 在数据库领域中 , 这就是索引 。
一般情况下 , 数据表都会有多个字段 , 那根据不同的字段也就可以设立不同的索引 。
索引的分类
主键索引聚集索引非聚集索引主键我们都知道 , 是唯一标识一条数据记录的字段(也存在多个字段一起来唯一标识数据记录的联合主键) , 那与之对应的就是主键索引了 。
聚集索引是指索引的逻辑顺序与表记录的物理存储顺序一致的索引 , 一般情况下主键索引就符合这个定义 , 所以一般来说主键索引也是聚集索引 。 但是 , 这不是绝对的 , 在不同的数据库中 , 或者在同一个数据库下的不同存储引擎中还是有不同 。
聚集索引的叶子节点直接存储了数据 , 也是数据节点 , 而非聚集索引的叶子节点没有存储实际的数据 , 需要二次查询 。
索引的实现原理
索引的实现主要有三种:
B+树哈希表位图其中 , B+树用的最多 , 其特点是树的节点众多 , 相较于二叉树 , 这是一棵多叉树 , 是一个扁平的胖树 , 减少树的深度有利于减少磁盘I/O次数 , 适宜数据库的存储特点 。


推荐阅读