数据库 | Bbolt | SqLite | Oracle Berkeley DB |
---|---|---|---|
驱动库支持 | go.etcd.io/bbolt | 无go官方驱动支持,但有第三方驱动库Mattn/go-sqlite3 | 官方有支持go的sdk,(但是官方给的链接打不开,怀疑是文档没更新https://orahub.oraclecorp.com/nosql-bdb-dev/go-bdb |
可视化数据库管理工具 | 较官方的可视化工具没有。Github上有一些可视化工具可使用 | 有多个工具支持sqlite可视化,包括navicat | 很少 |
可否嵌入 | 可嵌入 | 可嵌入 | 可嵌入 |
开源协议 | MIT | 无 | AGPL v3, Apache v2,商用要钱 |
性能 | 吞吐量:不同步写盘的情况下,读操作42万ops/s,写操作1.2万ops/s,删除操作4千ops/s,同步写盘的情况下,读操作27万ops/s,写操作67ops/s,删除操作81ops/s,可以用固态硬盘或批量操作缓解写操作性能低的问题。参考链接:https://colobu.com/2019/03/05/go-kv-databases-benchmark/ | 与mysql作对比,插入十万数量级的记录,sqlite的性能比mysql快五倍,当然,这与锁机制有关。sqlite的锁是粗粒度的,因此sqlite不适合高并发的场景。 | Linux系统下,不使用事务的情况,单记录读操作100万ops/sec,单记录写操作76.6万ops/sec.使用事务的情况,单记录读操作46.6万ops/sec.单记录写操作23.9万ops/sec。总之速度和并发度都比sqlite高。 |
维护情况 | Bbolt是已停止维护得原项目bolt的分支,现在由etcd团队维护 | 由Hwaci公司进行维护,官方声称会维护至2050年。 | 被Oracle收购后,由oracle进行维护 |
数据库类型 | 非关系型数据库,KV | 关系型数据库 | 非关系型数据库,KV |
优点 | 1. 为go设计的内嵌型kv数据库 2. 支持完全可序列化的ACID事务 3. 部署简单 4. 可靠稳定 | 1. 有公共论坛 2. 非常轻量,作为嵌入数据库非常合适 3.容易使用,不需要任何安装和配置 4.支持ACID事务 | 1. 支持事务,支持ACID 2.提供sql api,和sqlite的sql几乎相同 3.可扩展到PB级数据,数十亿条记录 |
缺点 | 1.性能一般般 2.对数据库文件使用独占写锁,因此它不能被多个进程共享 | 1. SQLite一般用于处理小到中型数据存储,对于高并发高流量的应用不适用 2. 只可以使用大部分的SQL-92标准,比如只支持左外连接,右外连接和全外连接暂不支持 3.SQLite数据库可以通过网络文件系统共享,但是与这种文件系统相关的潜在延时会导致性能受损。Sqlite更适合作为本地数据库 | 1.只支持大部分sql-92 2. 可视化支持工具少 3.搜索引擎检索词条少,遇到问题一时间难以马上找到解决方案 |
部署 | 无需单独部署 1. go get go.etcd.io/bbolt/… 安装于gobin路径 2.go程序内调用bbolt.open(path,mode,options)可读取指定path的文件,若不存在则生成一个。如果path只指定文件名,则于项目根目录下读取或生成相应的文件 | 无需单独部署 1. Go get github.com/mattn/go-sqlite3 2.sql.open(“sqlite3”,”path/dbname.db”) 打开指定路径下的db,若没有则自动生成 |
Ps:
firebird 不合适的原因:嵌入式版本只支持win,而且非嵌入式版本最新是4.0,嵌入式版本只停留在2.x没继续更新。
Oracle Berkeley DB可以当成是性能增强版sqlite
Mysql 5.7版本有个内嵌版mysql,在8.0版本被移除,内嵌版只支持c/c++
BoltDB是为go设计的KV存储数据库,但已停止维护