Как оптимизировать вставку в БД вложенной древовидной структурой?
Есть многоуровневая древовидная структура, получаемая с клиента
[
'name' => 'text1'
'children' => [
['name' => 'text2', 'children' => []],
[
'name' => 'text3'
'children' => [
['name' => 'text4', 'children' => []],
['name' => 'text5', 'children' => []],
['name' => 'text6', 'children' => []],
]
],
]
]
Стандартная: узел дерева и его потомки, с бесконечной вложенностью.
Как можнозанести все эти записи в БД оптимизированно? Наибольшей эффективностью.
У меня на уме только два способа:
Делать вставки рекурсивно в БД. Т.е. вставляется родитель, берётся у него
id, потом вставляются его потомки сparent_id, который только что получили, у них тоже получаемidи вставляем их потомков сparent_idуказывающим на них.Это легко сделать, но, боюсь, что это очень неэффективно, т.к. по сути, на 100 узлов будет 100
INSERT'ов (ну или каждую пачку детей можно через один INSERT записывать, но всё равно неэффективно).Взять последний
idв базе, даже заблокировать таблицу для записи, рассчитать все идентификаторы заранее и вписать их в массив. И уже одним инсертом вставить в БД.Этот способ мне не нравится, потому что надо блокировать всю таблицу на время рассчёта идентификаторов на сервере и их вставки.
Есть ли ещё способы вставки такой структуры?