数据库

数据库

软件的数据存储离不开数据库。数据库主要有 

  • 关系数据库 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;

Mysql

记录关系数据库 Mysql 的相关学习。

数据库使用的最佳方式

  • 尽量使用预处理.
  • 多条记录操作使用批处理.
  • 不使用外连接
  • 使用 not exist 替换 not in
  • or 不能太多
  • 更新操作放在事务最后
  • 少用临时表
  • distinct 导致不必要的排序

数据库优化方式

  • show status
  • explain
  • show profile
  • trace

其他

在项目的初期对数据库的选择十分重要,要进行压力测试。 另外一般的数据库 orm 会导致效率下降。 tqcenglish