У меня древовидная структура
(T)
M1 M2 M3 M4
M1L1 M1L2 M2L1 M3L1 M4L
где T - верхний уровень, M1, M2, M3, M4 - дочерние элементы T и M1L1, M1L2 - дочерние элементы M1 и так далее. Максимальная высота дерева будет 3. Максимальное количество узлов, которое может быть там, составляет 50 КБ. Я хотел бы сохранить его в базе данных. Я надеюсь сохранить данные в DynamoDB, поскольку вся моя инфраструктура сейчас находится в DynamoDB, и я хотел бы, если возможно, сохранить ее в самой DynamoDB.
Мне нужно будет выполнить следующие типы запросов:
1 - при условии возврата m1L1 всех потомков того же уровня (m1l1, m1l2)
2 - При заданном идентификаторе m1L1 возвращаются TopLevel (T) и M1
3 - если вернуть T, все Ms
4 - при условии T вернуть все Ms и lowerLevel вместе с отношением
5 - при условии возврата M1 все одинакового уровня (м1, м2, м3)
6 - возвращение М1 всем детям
7 - при заданном уровне возврата M1
Я думал о следующей схеме базы данных:
Primary Key (id of the node) Children Parent Sibling
T M1, M2,M3,M4 null null
M1 M1L1,M1L2 T M2, M3, M4
M2 M2L1 T M1, M3, M4
M1L1 null M1 M1L2
Я думал об использовании AppendSet (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html) для вставки в отношения Дети / Родители / Братья.
При таком подходе большинство моих запросов будут возможны, хотя мне может потребоваться дважды вызвать DDB для ex: если я хочу получить список всех детей, которым дан T, то есть для T получить M1, M2, M3, M4 , Затем сделайте пакетное получение для M1, M2, M3, M4.
Однако проблема с этим подходом - мои путы. Когда я вставляю в базу данных, мне придется обновляться в несколько строк. Также я не использую какие-либо индексы, которые, возможно, не очень хороши. Я неправильно подхожу к этому?