Влияние на производительность сохранения итерированной карты в одной таблице базы данных - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть тип Haskell, который по сути выглядит так:

data Thing = Map Int (Map Int (DataInside Int Int Int))

(Это не Map (Int, Int) (DataInside Int Int Int), поскольку данные типа Map Int (DataInside Int Int Int) связаны с первым ключом типа Intиспользуется довольно часто.)

Житель этого типа должен постоянно храниться.До сих пор он записывался в файлы с использованием Serialize экземпляров и cereal .(Однако данные хранятся в памяти во время работы программы, поэтому накладные расходы на чтение или запись файла возникают только при запуске или выходе программы.)

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

Мне интересно, как это влияет на производительностьбыло бы.Например, как поиск записи с ключами i и j можно сравнить с вычислением (M.! j) . (M ! i) (что должно занять около O(log n + log m), где n - это число первых ключей, а m - максимальное количество вторых ключей дляпервый ключ)?Как он будет работать при обновлении записи с заданными ключами?

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

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