伯克利DB:存储键的值列表



考虑一个示例应用程序,我们需要将客户名称存储为主键,并将他的交易列表存储为伯克利数据库中的值。伯克利是否支持针对主键存储值列表?如果是这样,如何设计实体?

最常见的方法是将记录保存为数据存储类型,例如 XML(或 JSON,如果您喜欢这种东西(。下面是我想出的一个 C# 示例,它将记录作为 JSON 对象存储在数据库中:

static void Main(string[] args)
{
var db = BTreeDatabase.Open("customers.db", new BTreeDatabaseConfig {Creation = CreatePolicy.ALWAYS});
for (int i = 0; i < 10000; i++)
{
var customer = new Customer
{
customerName = nameGenerator.GenerateRandomFirstAndLastName()
};
var list = new List<Transaction>();
for (int j = 0; j < 10; j++)
{
list.Add(new Transaction
{txAmount = random.NextDouble(), txDate = DateTime.Now, txId = randomString()});
}
customer.transactions = list;
db.Put(new DatabaseEntry(Encoding.Default.GetBytes(customer.customerName)),
new DatabaseEntry(Encoding.Default.GetBytes(JsonConvert.SerializeObject(customer))));
}
WriteLine("Completed!");
ReadLine();
}

当然,这不是最有效的方法,因为我存储了两次客户名称,但这应该是一个很好的起点。

最新更新