Эффективнее ли хранить значения идентификаторов в словаре или повторно запрашивать базу данных? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть скрипт, который заполняет большую базу данных и генерирует значения идентификаторов из других таблиц, когда это необходимо.

Примером будет запись информации о заказе, только если указаны имена клиентов.Я бы проверил, существует ли клиент в таблице CUSTOMER.Если это так, SELECT запросить его ID и вставить новую запись.В противном случае я бы создал новую запись CUSTOMER и получил бы Last_Insert_Id().

Поскольку эти значения многократно повторяются, и мне не всегда нужно генерировать новое ID - было бы лучше для меня сохранить отношение ID => CUSTOMER в качестве словаря, который проверяется перед достижениембаза данных или я должен сделать скрипт постоянно запрашивать базу данных?Я думаю, что первый подход - лучший, так как он снижает нагрузку на базу данных, но меня беспокоит, насколько большим будет словарь ID, и последствия этого.

Сценарий выполняется в том же окне, что и база данных, поэтому задержки в сети незначительны.

1 Ответ

0 голосов
/ 19 декабря 2018

«Это более эффективно»?

Ну, словарь хранит значения в хэш-таблице.Это должно быть достаточно эффективно для поиска значения.

Основным недостатком является поддержание словаря.Если вы знаете, что база данных не будет обновляться, вы можете загрузить ее один раз, и операции с памятью внутри приложения, вероятно, будут выполняться быстрее, чем все, что вы можете сделать с базой данных.

Однако, еслиданные меняются, тогда у вас есть реальная проблема.Как вы держите версию памяти в соответствие с версией базы данных?Это может быть очень сложно.

Мой совет - сохранить работу в базе данных, используя индексы для словарного ключа.Это должно быть достаточно быстро для вашего приложения.Если вам нужно увеличить скорость, то использование словаря - это одна из возможностей, но, несомненно, одна из многих, для повышения производительности приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...