как оптимизировать структуру данных для чтения для mongo или sql клиенту

#javascript #python #sql #mongodb

#javascript #python #sql #mongodb

Вопрос:

Я пытаюсь оптимизировать для чтения здесь, и хотя мой вопрос, по-видимому, не зависит от технологий, в моем случае для базы данных используется mongodb.

У меня есть массив файловых объектов, подобных so, которые я могу получить из конечной точки / api / files:

 [{id: 1, name: 'foo', size: 500},
{id: 2, name: 'bar', size: 600},
{id: 3, name: 'baz', size: 700}]
  

это я получу при загрузке приложения.

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

здесь у меня есть возможность либо:

  1. использование /api/files/1 (:id), что будет стоить поездки по сети туда и обратно

  2. Я могу попытаться найти информацию о файле, которую я хочу изменить, запустив files.find(file => file.id === 1) , что может быть не очень эффективно.

  3. Полностью измените способ хранения данных «files» в mongo в виде вложенных объектов, а не в виде массива, например

 {
1: {id: 1, name: 'foo', size: 500},
2: {id: 2, name: 'bar', size: 600},
3: {id: 3, name: 'baz', size: 700}
}
  

это означало бы, что я могу потерять возможность использовать метод findOne от mongodb или его эквивалент SQL.

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

Комментарии:

1. почему find не будет работать? Предположительно, mongodb предоставит вам бесплатный индекс по идентификатору, который будет просто искать индекс в большинстве технологий БД.

2. @Brenden, дополнительный вызов серверной части и связанный с ней поиск mongo (вариант 1) повлечет за собой штраф за задержку, тогда как локальный поиск в кэшированном списке будет неиндексирован (вариант 2). Я пытался понять, какое из двух зол будет меньшим

3. Под локальным кэшем вы подразумеваете, что вы находите все заранее, и оно существует где-то на клиенте, чтобы избежать вызовов в оба конца?

4. да. точно. Я бы извлек все файлы, вроде как запустил ls в каталоге, чтобы показать содержимое каталога, и оно будет кэшироваться локально на клиенте.

5. Похоже, здесь есть две проблемы. 1) Оптимизация операций чтения на сервере 2) Минимизация запросов на клиенте. Для 1, предполагая, что ваше приложение работает на одном компьютере, просто кэшируйте свои данные в памяти. Вам придется удалять эти данные при выполнении записи. 2) Пока общая длина данных является разумной, просто предварительно загрузите всю коллекцию. если данные стабильны, вы можете сохранить их в локальном хранилище на некоторое время.