Berkeley DB: сохранение списка значений для ключа
Рассмотрим пример приложения, в котором нам нужно сохранить имя Клиента в качестве первичного ключа и список его транзакций в качестве значения в Беркли БД. Поддерживает ли Беркли сохранение списка значений по первичному ключу? Если да, то как подойти к проектированию объекта?
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();
}
Конечно, это не самый эффективный способ, так как я сохраняю имя клиента дважды, но это должно стать хорошей отправной точкой.