For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
高性能编程开发是程序员在开发软件的时候需要满足的一个开发需求,而本文我们就通过案例分析来了解一下,高性能编程开发特点都有哪些。
1)读写分离
读写分离的基本原理是将数据库读写操作分散到不同的节点上。
读写分离的基本实现是:
数据库服务器搭建主从集群,一主一从、一主多从都可以。
数据库主机负责读写操作,从机只负责读操作。
数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。
业务服务器将写操作发给数据库主机,将读操作发给数据库从机。
读写分离的实现逻辑并不复杂,但有两个细节点将引入设计复杂度:主从复制延迟和分配机制。
2)分库分表
业务分库指的是按照业务模块将数据分散到不同的数据库服务器。虽然业务分库能够分散存储和访问压力,但同时也带来了新的问题:
原本在同一个数据库中的表分散到不同数据库中,导致无法使用SQL的join查询。
表分散到不同的数据库中,无法通过事务统一修改。
业务分库同时也带来了成本的代价,本来1台服务器搞定的事情,现在要3台,如果考虑备份,那就是2台变成了6台。
单表数据拆分有两种方式:垂直分表和水平分表。
垂直分表引入的复杂性主要体现在表操作的数量要增加。水平分表相比垂直分表,会引入更多的复杂性,主要表现在下面几个方面:
某条数据具体属于哪个切分后的子表,需要增加路由算法进行计算。
数据分散在多个表中,如果需要与其他表进行join查询,需要在业务代码或者数据库中间件中进行多次join查询,然后将结果合并。
水平分表前用一个count()就能完成的操作,在分表后就没那么简单了。
排序操作无法在数据库中完成,只能由业务代码或者数据库中间件分别查询每个子表中的数据,然后汇总进行排序。
3)NoSQL
关系数据库存在如下缺点。
关系数据库存储的是行记录,无法存储数据结构。
关系数据库的schema扩展很不方便。
关系数据库在大数据场景下I/O较高。
关系数据库的全文搜索功能比较弱。
NoSQL!=NoSQL,而是NoSQL=NotOnlySQL。常见的NoSQL方案分为4类。
K-V存储:解决关系数据库无法存储数据结构的问题,以Redis为代表。
文档数据库:解决关系数据库强schema约束的问题,以MongoDB为代表。
列式数据库:解决关系数据库大数据场景下的I/O问题,以HBase为代表。
全文搜索引擎:解决关系数据库的全文搜索性能问题,以Elasticsearch为代表。