数据持久化设计总结

简介: 数据持久化设计总结

Schema设计

1.为所有非字符串设置默认值

2.尽量不使用”0”表达任何业务含义,因为0还包含默认值

3.枚举类型的数据尽量使用2的次方来表示

4.将变化的数据和持久的数据分离

5.将表达同一含义的用户数据与系统数据分开存储,必要时可以冗余系统数据。

6.使用”汇总表”,将同步数据异步化。对技术上难以达到满意的实现,一定要考虑体验与技术的折中,而不是无底线的向体验靠拢,最终导致影响体验。

7.使用”计数器表”,设计多个slot汇总统计信息以降低事务加锁等待,然后周期性的异步将数据汇总到同一个slot。

8.尽量避免过度设计

索引使用

1.索引使用限制:

1.查询必须从索引的最左边的列开始。

2.不能跳过某一索引列。例如,你不能利用索引查找last name为Smith且出生于某一天的人。

3.存储引擎不能使用索引中范围条件右边的列。

2.索引中列顺序的重要性:

1.如果不是按照索引最左列开始查找,则无法使用索引。

2.查询不能跳过索引中的列使用索引

3.如果查询使用某个列中范围查询,则右边所有列都无法使用索引优化查找

4.将选择性最高的列放到索引的最前列。

3.select count(*)要比select count(primary key)快速,前者会优先选择使用辅助索引(size小)而不是聚集索引(size大)。因为减少I/O,所以速度更快。

熟悉索引类型,BTree索引(聚簇索引、非聚簇索引)、Hash索引、全文索引。更深入的了解Innodb,才能更好的使用它,扩展资料:

Innodb文件格式:http://www.slideshare.net/mysqlops/innodb-internal-9032556

Innodb源码实现分析:http://www.slideshare.net/frogd/my-sql-innodb

使用

1.区分状态数据的业务含义与物理含义

2.查询条件语句不是越多越好,只留下使用索引和必需的条件即可

3.尽量为所有查询设计索引,使用explain语句验证所有的语句使用了索引。更快的读,更慢的写。数据量达到50万级别时,全量搜索将不可用(0.9s左右)。

4.设计接口时,所有不走索引的接口都应该从业务角度来考量,寻找替代的解决方案

5.数据分页排序一定要使用索引分页排序,即一定要有唯一主键,而非联合主键。

6.MySQL不适合大数据量的模糊搜索,如果需要模糊查找的字段过多,sphinx应该是个不错的替代方案

更新日记

2014-09-09 ———-创建文档

2015-11-10 ———-新增分页排序、模糊查找相关内容

(完)

本文作者 : cyningsun

本文地址https://www.cyningsun.com/09-09-2014/data-persistence.html

版权声明 :本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 CN 许可协议。转载请注明出处!


目录
相关文章
|
4月前
|
存储 Kubernetes 调度
在K8S中,怎样实现数据持久化?
在K8S中,怎样实现数据持久化?
|
4月前
|
存储 缓存 Kubernetes
在k8S中,数据持久化的方式有哪些?
在k8S中,数据持久化的方式有哪些?
|
4月前
|
存储 Kubernetes 调度
在K8S中,是怎么实现数据持久化的?
在K8S中,是怎么实现数据持久化的?
|
7月前
|
存储 监控 安全
中间件应用优化持久化配置
【5月更文挑战第4天】中间件应用优化持久化配置
87 2
中间件应用优化持久化配置
|
7月前
|
缓存 NoSQL Redis
软件体系结构 - 缓存技术(7)Redis持久化方法
【4月更文挑战第20天】软件体系结构 - 缓存技术(7)Redis持久化方法
129 14
|
7月前
|
存储 缓存 NoSQL
软件体系结构 - 缓存技术(4)Redis分布式存储
【4月更文挑战第20天】软件体系结构 - 缓存技术(4)Redis分布式存储
87 12
|
7月前
|
存储 Kubernetes 调度
K8S常见的持久化(存储)方案用法详解
K8S常见的持久化(存储)方案用法详解
615 3
|
缓存 NoSQL 安全
分布式系列教程(05) -分布式Redis缓存 (持久化)
分布式系列教程(05) -分布式Redis缓存 (持久化)
159 0
|
7月前
数据持久化
数据持久化
23 1
|
存储 缓存 NoSQL
缓存存储介质是什么?底层原理是什么?
缓存存储介质是什么?底层原理是什么?
222 0