как сформировать древовидную структуру базы данных с помощью lmdb
Здесь я пытаюсь создать базу данных графов, структура которой будет выглядеть следующим образом. Поскольку я продолжаю добавлять новые узлы, я не вижу
depth of the tree increasing
. Можно ли предположить, что я здесь делаю не так?
A:1
/ \
B:2 C:3
/ \
D:4 E:5
>>> import lmdb
>>> env = lmdb.open("treedb.lmdb")
>>> txn = env.begin(write = True)
>>> txn.stat()
{'psize': 4096, 'depth': 0, 'branch_pages': 0, 'leaf_pages': 0, 'overflow_pages': 0, 'entries': 0}
>>> txn.put(json.dumps({'A':1}).encode('utf-8'))
True
>>> txn.stat()
{'psize': 4096, 'depth': 1, 'branch_pages': 0, 'leaf_pages': 1, 'overflow_pages': 0, 'entries': 1}
>>> txn.put(json.dumps({'A':{'B':2}}).encode('utf-8'))
True
>>> txn.stat()
{'psize': 4096, 'depth': 1, 'branch_pages': 0, 'leaf_pages': 1, 'overflow_pages': 0, 'entries': 2}
>>>
>>> txn.put(json.dumps({'A':{'C':3}}).encode('utf-8'))
True
>>>
>>> txn.stat()
{'psize': 4096, 'depth': 1, 'branch_pages': 0, 'leaf_pages': 1, 'overflow_pages': 0, 'entries': 3}
>>>
>>> txn.put(json.dumps({'B':{'D':4}}).encode('utf-8'))
True
>>> txn.put(json.dumps({'C':{'E':5}}).encode('utf-8'))
>>> txn.stat()
{'psize': 4096, 'depth': 1, 'branch_pages': 0, 'leaf_pages': 1, 'overflow_pages': 0, 'entries': 5}
1 ответ
Сначала неясно, чего вы пытаетесь достичь с помощью
txn.stats
.
Второй,
str.encode
это функция упаковки "бедняги", вам нужно что-то вроде .
Если вы хотите перейти от родителя к потомкам и обратно, учитывая следующее дерево:
a
|_b
|_c
|_d
|_e
|_f
|_g
|_h
Учитывая следующие обозначения
key -> value
, вы можете построить следующую схему okvs:
a -> properties
a.b -> properties
a.c -> properties
a.d -> properties
a.e -> properties
a.e.f -> properties
a.e.g -> properties
a.e.h -> properties
Если, скажем, у вас есть узел
a.e.g
вы можете получить родительский элемент, удалив последний компонент, который нужно получить, а затем запросить все дочерние элементы
a.e
, вы запрашиваете диапазон ключей с префиксом (начинается с)
a.e.
.
См. /questions/59088243/kak-ukazat-diapazon-vklyuchayuschij-vse-v-stolbtse-rocksdb/59217200#59217200
Действительно точка
.
поскольку разделитель - это взлом, посмотрите python-lexode
.