Как выбрать между базой данных SQLite и использованием в памяти - PullRequest
6 голосов
/ 15 августа 2011

Я унаследовал проект от коллеги, который покинул компанию. Исследуя его код, я чем-то растерялся. После того, как он получает довольно большой объем данных с сервера, он сохраняет эти данные в базе данных на клиенте и затем продолжает работать с этими данными на БД. Данные принимаются один раз в начале заявки. Что я не мог понять, так это то, почему он просто не использует данные из памяти, а должен хранить их в БД?

Внутри приложения есть много операций с интенсивным использованием памяти, таких как просмотр больших pdf-файлов с использованием Quartz и т. Д., Но разве размер sqlite также не учитывается как использование памяти приложением? Я имею в виду, как вы думаете, преимущество этого может быть?

Ответы [ 3 ]

6 голосов
/ 15 августа 2011

SQLite занимает очень мало места при загрузке (~ 250-400 Кб).Когда SQLite работает с базой данных на диске, из-за этого не возникает никаких накладных расходов памяти, он даже не измеряет размер файла (по умолчанию база данных может содержать около 1 ТБ данных в своих таблицах).И, как вы сказали, это постоянное хранилище данных.

В случае хранилища базы данных в памяти ваше приложение будет потреблять

memory = database file size + small overhead

Кроме того, вы получите некоторые ограничения с запросами, которые вы можетевыполнять в базе данных в памяти (я не могу вспомнить время, когда я на улице, но вы не можете использовать транзакции и вакуум)

Используйте SQLite с базой данных на диске, и вы получите более быстрый доступ к данным именьшая занимаемая площадь, чем при использовании файлов для хранения набора данных

4 голосов
/ 15 августа 2011

С SQLite вы можете быстро и легко запрашивать конкретные данные, не загружая весь набор данных в память и не перебирая его.

1 голос
/ 26 июля 2015

В основном, если вы храните его в локальной файловой системе и загружаете его в память по требованию, он всегда будет иметь меньший (или равный) объем памяти, чем если бы вы ВСЕ данные загружали в память все время.Если вы сохраните все в файловой системе, это сохранит память, потому что вам не нужно загружать все (в память) сразу, и даже когда что-то загружается, оно быстро закрывается.Недостатком этого является более медленное время доступа, что выражается в снижении реальной производительности при очень высоких нагрузках.

С другой стороны, если вы сохраняете все загруженное в память, оно будет иметь гораздо больший объем памяти, компенсируемыйгораздо быстрее время доступа к базе данных.Вы будете иметь лучшую производительность в реальных условиях при очень высоких нагрузках (при условии, что вы сможете приспособить использование памяти), но при этом значительно увеличите объем используемой памяти.

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

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