Berkeley DB: сохранение списка значений для ключа - PullRequest
0 голосов
/ 07 сентября 2018

Рассмотрим пример приложения, в котором нам нужно сохранить имя Клиента в качестве первичного ключа и список его транзакций в качестве значения в Беркли БД.Поддерживает ли Беркли сохранение списка значений по первичному ключу?Если да, то как подойти к проектированию объекта?

1 Ответ

0 голосов
/ 09 сентября 2018

Наиболее распространенным подходом является сохранение записей в виде типа хранения данных, такого как 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();
    }

Конечно, это не самый эффективный способ, поскольку я дважды сохраняю имя клиента, но это должно стать хорошей отправной точкой.

...