Berkeley DB:存储键的值列表

Posted

技术标签:

【中文标题】Berkeley DB:存储键的值列表【英文标题】:Berkeley DB: Storing List of values for a Key 【发布时间】:2018-09-07 07:28:36 【问题描述】:

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

【问题讨论】:

你能举个例子(pk, transactions)。是什么导致无法使用例如 JSON 序列化事务列表? 【参考方案1】:

最常见的方法是将记录保存为数据存储类型,例如 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();
    

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

【讨论】:

以上是关于Berkeley DB:存储键的值列表的主要内容,如果未能解决你的问题,请参考以下文章

Berkeley DB:“make install”在 Linux 上失败

如何在不安装的情况下在应用程序中使用 Berkeley DB

如何使用berkeley db检索键小于指定键的数据?

Java Berkeley DB 是不是有并发读取的上限?

berkeley db java edition怎样存储数据库?

如何跟踪存储在 Oracle Berkeley DB XML 中的文件的更改