В настоящее время я сталкиваюсь с проблемой сглаживания головы, я работаю с большим набором данных (когда я говорю "большой", я имею в виду миллиарды строк данных), и я попадаю между скоростью и масштабируемостью.
Я могу хранить миллиарды строк данных в базе данных, но моему приложению необходимо постоянно проверять, существует ли в наборе данных новая строка данных, если нет, вставьте ее, в противном случае извлеките ее.
Если бы я использовал решение для базы данных, я бы оценил каждый вызов базы данных, чтобы получить строку данных в 10 мс (оптимистичная оценка), мне нужно получить около 800 тыс. записей для каждого файла, который я обрабатываю в своем приложении, это означает (10ms x 800k = 2.22 hours)
для каждого файла для обработки. Этот промежуток времени слишком длинный, чтобы анализировать и обрабатывать 1 файл, учитывая, что время, необходимое для извлечения строки данных из базы данных, будет увеличиваться, когда база данных вырастет до миллиардов и миллиардов строк.
Я также подумал о сохранении List
или HashSet
в локальной памяти для сравнения и извлечения, но он не будет работать, поскольку я не смогу хранить миллиарды записей (объектов) в память.
Посоветуйте мне, что я должен сделать для своей ситуации.
Изменить: О, я забыл указать, что я уже реализовал полу кеш, как только запись будет восстановлена, он будет кэшироваться в памяти, поэтому, если одна и та же запись должна быть восстановлена снова, это будет вместо этого извлекается из памяти, но я сталкиваюсь с одной и той же проблемой, я достигнет момента времени, когда память больше не сможет больше кэшировать данные.