数据库
数据库
软件的数据存储离不开数据库。数据库主要有
- 关系数据库 mysql,sqlite, postgresql
- 非关系数据库 mongoDB, leveldb, rokcsDB, Realm
- 图形数据库
mongo 是一个面向文档的数据库,它集合了nosql和sql数据库两方面的特性。所有实体都是在首次使用时创建。
没有严格的事务特性,但是它保证任何一次数据变更都是原子性的。也没有固定的数据模型,mongo以javascript作为命令行执行引擎,所以利用shell进行复杂的计算和查询时会相当的慢。
mongo本身支持集群和数据分片, mongo是c++实现的,支持windows mac linux等主流操作系统. 性能优越,速度快
leveldb
谷歌开源的k-v数据库。支持主要平台,但缺少相关语言封装。主要封装为 levelup 基于 go 实现。
rocksDB
Facebook 在 leveldb 的基础上开源的数据库。 据说更高效。
github
rocksdb
Realm
主要面向移动端的现代数据库。 可以替换 ios 的 CocaData 和 Android 的 Sqlite;
- Realm for Android快速入门教程 中文 英文
- github realm-java
- github realm-cocoa
Mysql
记录关系数据库 Mysql 的相关学习。
数据库使用的最佳方式
- 尽量使用预处理.
- 多条记录操作使用批处理.
- 不使用外连接
- 使用 not exist 替换 not in
- or 不能太多
- 更新操作放在事务最后
- 少用临时表
- distinct 导致不必要的排序
数据库优化方式
- show status
- explain
- show profile
- trace
其他
- MySQL性能优化的最佳20+条经验
- MySQL: InnoDB 还是 MyISAM?
- mysql set log 数据配置已改变
- mysql explain用法
- MySQL not using indexes with WHERE IN clause?
- mysql表切换引擎的几种方法
在项目的初期对数据库的选择十分重要,要进行压力测试。 另外一般的数据库 orm 会导致效率下降。 tqcenglish