一、读写分离
1.1 what 读写分离
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
1.2 why 那么为什么要读写分离呢
因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。 但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。 所以读写分离,解决的是,数据库的写入,影响了查询的效率。
1.3 when 什么时候要读写分离?
数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用,利用数据库主从同步。可以减少数据库压力,提高性能。当然,数据库也有其它优化方案。memcache 或是表折分,或是搜索引擎。都是解决方法。
1.4 主从复制与读写分离
在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
5、实现:Mysql支持主从数据库。(主数据库用来写入数据,从数据库用来读取数据。需要修改配置信息,以实现主从数据库,来读写分离)
6、读写分离:提高效率(写入的效率太低了。)
二、分库分表
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
三、Tbase
3.1 DN:Data Node 数据节点
shard分区表 分区键 分布键
3.2 分区分库对多表联查是否有影响
四、postgresql使用及常见问题
4.1 Postgresql 当中有四种方式获取当前时间
1、now()
通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数。 select now(); 得到的结果如下 '2014-12-24 09:28:31.545145+08'
2、current_timestamp效果是和now()一样的。
3、current_time
只显示当前的时间,不包括日期 select current_time; 得到的结果如下 '09:32:02.039705+08'
4、current_date
只显示当前的日期,不包括小时等信息 select current_date; 得到的结果如下 '2014-12-24'
5、我们还可以控制now()的返回格式,如下
select now()::timestamp(0)without time zone;(current_timestamp 是和now()一样的)
时间的计算方式,如下
select now() + interval '10 min/year/month/day/hour/sec/ (1 year 1 month 1 day 1 hour 1 min 1 sec)'