SQLite: каковы практические ограничения?

Прежде чем пометить этот вопрос как дубликат, ПОЖАЛУЙСТА, ВЫСЛУШАЙТЕ МЕНЯ!!
Я уже читал заданные здесь вопросы о том, как улучшить производительность, например. просто упомянем несколько Повышение производительности INSERT в секунду для SQLite? и Каковы характеристики производительности sqlite с очень большими файлами базы данных?

Я пытаюсь заставить sqlite работать с файлом базы данных размером 5 гигабайт. Наоборот, есть люди, которые утверждают, что sqlite отлично работает для них, даже когда размер базы данных достигает 160 ГБ. Я сам не пробовал, но из заданных вопросов я предполагаю, что все эталонные тесты, возможно, выполняются только с таблицей в базе данных.

Я использую базу данных с
- 20 или около того столов
- Половина таблиц имеют более 15 столбцов
- Каждая из этих 15 или около того таблиц столбцов имеет 6/7 столбцов внешнего ключа. - Некоторые из этих таблиц уже выросли до 27 миллионов записей за месяц

Машина для разработки, которую я использую, представляет собой четырехъядерную машину с тактовой частотой 3 ГГц и 4 ГБ ОЗУ, и все же только запрос занимает более 3 минут. row_count в этих больших таблицах.

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

Итак, мои вопросы
а) Я использую неправильную базу данных для работы?
б) Как вы думаете, где я ошибаюсь?
c) Я еще не добавлял индексы для внешних ключей, но если только запрос подсчета строк занимает четыре минуты, как мне помогут индексы внешних ключей?

РЕДАКТИРОВАТЬ Чтобы предоставить больше информации, хотя никто не просил об этом :) Я использую SQLite версии 3.7.9 с system.data.sqlite.dll версии 1.0.77.0

EDIT2: Я ДУМАЮ, чем я собираюсь отличаться от 160-гиговых парней, так это тем, что они могут выбрать отдельную запись или небольшой набор записей. Но мне нужно загрузить все 27 миллионов строк в мою таблицу, объединить их с другими таблицами, сгруппировать записи по запросу пользователя и вернуть результаты. Любой вклад в то, как лучше всего оптимизировать базу данных для таких результатов.

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

7
задан Community 23 May 2017 в 12:25
поделиться