gpt4 book ai didi

database - 如何增加/加倍 sqlite 数据库文件的大小

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:49 24 4
gpt4 key购买 nike

我想对超大 (200+ MB) Sqlite 文件进行一些测试。我有一些相对较小的文件 (10MB),但我想测试更大的文件。

有没有什么快速的方法/工具可以通过复制表中的数据来增加这些 Sqlite 文件的大小?

或者,有没有网站可以免费提供巨大的 Sqlite 文件供我下载?

谢谢。

最佳答案

如果您想测试大型数据库,您可以生成并插入假数据。有像 Bogus 这样的工具来帮助你。

这里有一个用 C# 编写的示例,它创建一个带有订单表的数据库,并使用伪造来生成一千万个订单:

using Bogus;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BogusSample
{
public class Order
{
public int OrderId { get; set; }
public int CustomerId { get; set; }
public int EmployeeId { get; set; }
public DateTime OrderDate { get; set; }
public Decimal OrderTotal { get; set; }
}

class Program
{
static void Main(string[] args)
{
var watch = Stopwatch.StartNew();

int tenMillion = 10 * 1000 * 1000;

int orderId = 1;
var orderFaker = new Faker<Order>()
.StrictMode(true)
.RuleFor(x => x.OrderId, f => orderId++)
.RuleFor(x => x.CustomerId, f => f.Random.Number(1, 2000))
.RuleFor(x => x.EmployeeId, f => f.Random.Number(1, 100))
.RuleFor(x => x.OrderDate, f => f.Date.Recent(400))
.RuleFor(x => x.OrderTotal, f => f.Finance.Amount(10, 1000, 2));

using (var cn = RecreateDatabase())
using (var cmd = CreateInsertCommand(cn))
using (var tx = cn.BeginTransaction())
{
foreach (Order fakeOrder in orderFaker.Generate(tenMillion))
{
cmd.Parameters["@OrderId"].Value = fakeOrder.OrderId;
cmd.Parameters["@CustomerId"].Value = fakeOrder.CustomerId;
cmd.Parameters["@EmployeeId"].Value = fakeOrder.EmployeeId;
cmd.Parameters["@OrderDate"].Value = fakeOrder.OrderDate;
cmd.Parameters["@OrderTotal"].Value = fakeOrder.OrderTotal;
cmd.ExecuteNonQuery();
}
tx.Commit();
}

Console.WriteLine("Elapsed Time: {0}", watch.Elapsed);
}

static SQLiteCommand CreateInsertCommand(SQLiteConnection cn)
{
var insertCommandText = @"
INSERT INTO Orders VALUES(@OrderId, @CustomerId, @EmployeeId, @OrderDate, @OrderTotal)
";
var cmd = new SQLiteCommand(insertCommandText, cn);
cmd.Parameters.Add("@OrderId", DbType.Int32);
cmd.Parameters.Add("@CustomerId", DbType.Int32);
cmd.Parameters.Add("@EmployeeId", DbType.Int32);
cmd.Parameters.Add("@OrderDate", DbType.DateTime);
cmd.Parameters.Add("@OrderTotal", DbType.Decimal);

return cmd;

}


static SQLiteConnection RecreateDatabase()
{
var dataBasePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Orders.db");
if (File.Exists(dataBasePath)) File.Delete(dataBasePath);
var cn = new SQLiteConnection(string.Format("Data Source=\"{0}\"", dataBasePath));
var createTableCommandText = @"
CREATE TABLE orders
(
OrderId INTEGER PRIMARY KEY,
CustomerId INT NOT NULL,
EmployeeId INT NOT NULL,
OrderDate DATETIME NOT NULL,
OrderTotal NUMERIC(19, 2)
)
";
using (var cmd = new SQLiteCommand(createTableCommandText, cn))
{
cn.Open();
cmd.ExecuteNonQuery();
}

return cn;
}
}
}

将这些行插入我的笔记本电脑大约需要 30 分钟(每秒 5500 行)。数据库文件大小约为 512 Mb。

关于database - 如何增加/加倍 sqlite 数据库文件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34379141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com