rqlite使用方案
存储类型 | 大小限制 | 优点 | 缺陷 | 通病 |
---|---|---|---|---|
1、tmpfs-内存文件系统 | 取决于物理内存和交换分区大小 | 性能较默认内存数据库提升100倍 | 重启系统会导致数据丢失 | 网络延迟,并发读写较差 |
2、使用磁盘上的SQLite数据库将其挂载到内存文件系统中 | 取决于物理内存和交换分区大小 | 既可以获取好的读写并发性又可以保证数据不丢失 | 网络延迟 | |
3、默认内存数据库 | 2G | 速度一般 | 每次更改都会先写日志到磁盘中保证数据不丢失,影响性能 | 网络延迟,并发读写较差 |
最佳实践
使用方案2:结合tmpfs-内存文件系统与SQLite磁盘数据库
1、tmpfs-内存文件系统
-
tmpfs 是linux系统上的一种基于内存的文件系统,可以使用内存或交换分区来存储文件,默认大小为物理内存的一半。
-
只有在tmpfs存放文件时,才会分配内存空间来存放文件
-
在tmpfs存放的文件是动态占用空间的,随着文件占用的增加而增大,当文件删除时,动态的减小文件系统空间占用并释放内存
-
没有持久性,系统重启会导致数据清空
#创建tmpfs-文件系统
mount -t tmpfs -o size=5120m tmpfs /mnt/ramdisk
#将数据库文件保存到tmpfs文件系统中
./rqlited -http-addr 192.168.46.25:4101 -raft-addr 192.168.46.25:4102 /mnt/ramdisk/data
2、结合tmpfs-内存文件系统与SQLite磁盘数据库
#创建大小为5120m的tmpfs
mount -t tmpfs -o size=5120m tmpfs /mnt/ramdisk
#启动rqlite同时将 数据库文件存储在 /opt/rqlite/rqlite/data 磁盘中
./rqlited -http-addr 192.168.46.25:4101 -raft-addr 192.168.46.25:4102 -on-disk -on-disk-startup -on-disk-path /mnt/ramdisk/node1/db.sqlite /opt/rqlite/rqlite/data
3、默认内存数据库
#启动
./rqlited -http-addr 192.168.46.25:4101 -raft-addr 192.168.46.25:4102 /opt/rqlite/rqlite/data
性能测试
1、结合tmpfs-内存文件系统与SQLite磁盘数据库
#创建挂载
mount -t tmpfs -o size=4096m tmpfs /mnt/ramdisk
#启动
./rqlited -http-addr 192.168.46.25:4101 -raft-addr 192.168.46.25:4102 -on-disk -on-disk-startup -on-disk-path /mnt/ramdisk/node1/db.sqlite /opt/rqlite/rqlite/data
batch 30万(秒) | commit次数 | 总记录 | 插入记录 | |
---|---|---|---|---|
sqllite | 379.425 | 每3千条commit一次 | 540_0000 | 540_0000 |
rqlite | 528.53 | 每3千条commit一次 | 540_0000 | 540_0000 |
rqlite | 358.32 | 30_0000 | 540_0000 | 540_0000 |
rqlite | 340.31 | 3_0000 | 540_0000 | 540_0000 |
rqlite | 369.16 | 3_0000 | 1104_0000 | 540_0000 |
查询性能
batch 30万(秒) | 每组记录数 | |
---|---|---|
rqlite | 5.826 | 30_0000 |
rqlite | 4.181 | 60_0000 |
2、内存数据库
#启动
./rqlited -http-addr 192.168.46.25:4101 -raft-addr 192.168.46.25:4102 /opt/rqlite/rqlite/data
batch 30万(秒) | commit次数 | 每张表最大插入记录数 | |
---|---|---|---|
sqllite | 379.425 | 每3千条commit一次 | 不限制 |
rqlite | 311.02 | 每3千条commit一次 | 608__7148 |
问题
- 超过2g内存数据时会导致后续插入失败
使用默认内存数据库2G大小,查询性能
sqllite(秒) | rqlite(秒) | 查询记录数 |
---|---|---|
4.168 | 2.275 | 30_00*8=240_0000 |
3、tmpfs-内存文件系统
不会保证数据安全,未测试