Android开发学习笔记(3)
终端存储
数据存储类型及方法
- 用户数据分类
- 文件
- 键值对(可用于配置类)
- 数据库
文件存储
- 二进制方式直接存储
- 整体处理,无需理解内部结构
- 内容大,磁盘空间连续性好,写入读取性能更好
- 大量文件时,文件命名、映射,组织目录
键值对
- xml、json、protobuff皆跨平台
- json适合网络数据交互
- protobuff
- proto描述文件
- 编译->程序对象,利用程序对象进行序列化(serilize到二进制)和反序列化(parse从二进制获得程序对象)
- 访问速度最快,存储空间最小
SQLite
- 特点
- 本地存储,基于单个文件
- 支持事务
- 支持加密
- 跨平台
- 索引
- 查找性能提升
- 插入时带来额外开销(相对而言极小)
- 复合索引
- 增加可扩展的字段
- 跨表 解决扩展字段解决不了的需求
数据库
SQLite架构
- 执行部分:基于字节码的虚拟机
- 磁盘管理部分
SQLite数据文件组织架构
- 分块(page)
- B树
- 数据可存放于所有节点(用于索引)
- B+树
- 实际数据存于叶子节点(用于表的存储,比索引数据大很多)
- 参考 —— B树、B-树、B+树、B*树
- 溢出页
优化
- 用定长数据做索引值可减少page的碎块
- 考虑分表,将经常改变的数据单独设为一个表,避免其他数据的更新改变
表的存储
- B树的高度直接影响访问速度
索引
- 不用索引需进行全表扫描
- 建索引,排序,二分查找
- 索引数据以字节记尽量小,减小B树高度,高度越小,磁盘读取次数越少(尽量整数,用hash)
- 每个索引都是一棵独立B树,插入操作时要更改所有B树,故应避免过多索引导致插入性能的下降。
- 如果只查找关键少量数据,可单独为这几列数据建复合索引
- 避免索引为另一个复合索引的前缀。
大数据情况下
- 尽量把大数据的列(blob或text类型)在创建table时候顺序往后面位置放。