rqlitetop1实现方案及与sqlite性能测试

10 篇文章 2 订阅

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次数总记录插入记录
sqllite379.425每3千条commit一次540_0000540_0000
rqlite528.53每3千条commit一次540_0000540_0000
rqlite358.3230_0000540_0000540_0000
rqlite340.313_0000540_0000540_0000
rqlite369.163_00001104_0000540_0000

查询性能

batch 30万(秒)每组记录数
rqlite5.82630_0000
rqlite4.18160_0000

2、内存数据库

#启动
./rqlited -http-addr 192.168.46.25:4101 -raft-addr 192.168.46.25:4102 /opt/rqlite/rqlite/data
batch 30万(秒)commit次数每张表最大插入记录数
sqllite379.425每3千条commit一次不限制
rqlite311.02每3千条commit一次608__7148

问题

  • 超过2g内存数据时会导致后续插入失败

使用默认内存数据库2G大小,查询性能

sqllite(秒)rqlite(秒)查询记录数
4.1682.27530_00*8=240_0000

3、tmpfs-内存文件系统

不会保证数据安全,未测试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现 C# 实体与 SQLite 的映射,可以使用 Entity Framework Core,它提供了一种便捷的方式来对 SQLite 数据库进行操作。以下是几个简单的步骤: 1. 安装 Entity Framework Core NuGet 包 可以使用 NuGet 管理器或者命令行安装 Entity Framework Core 包: ``` Install-Package Microsoft.EntityFrameworkCore.Sqlite ``` 2. 创建实体类 在 C# 中创建代表数据库表的实体类,每个实体类代表一个表,每个属性代表一列。例如,一个名为 `Person` 的实体类可以如下所示: ``` public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } ``` 3. 创建 `DbContext` 类 在 C# 中创建一个继承自 `DbContext` 的类,用于管理数据库上下文和实体集。例如,一个名为 `MyDbContext` 的类可以如下所示: ``` public class MyDbContext : DbContext { public DbSet<Person> Persons { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Data Source=mydatabase.db"); } } ``` 在上面的代码中,我们定义了一个 `DbSet` 属性来表示一个实体集,以及一个 `OnConfiguring` 方法来定义 SQLite 数据库的连接字符串。 4. 使用实体 使用实体类来执行数据库操作。例如,向数据库中插入一条新的 Person 记录: ``` using (var context = new MyDbContext()) { var person = new Person { Name = "John Doe", Age = 30 }; context.Persons.Add(person); context.SaveChanges(); } ``` 以上就是使用 Entity Framework Core 实现 C# 实体与 SQLite 的映射的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值