как сформировать древовидную структуру базы данных с помощью 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.

Другие вопросы по тегам