История изменений
Исправление Deleted, (текущая версия) :
На всякий:
-
Никакие индексы тут не помогут, т.е. БД всегда должна будет прочитать все данные.
-
С ростом кол-ва данных сложность будет расти как
O(N*N*L)
, т.е. довольно быстро узким местом станет вычисление, а не выборка или чтение с диска. -
Если данных много и нужна скорость, то сами вычисления придется делать «на С» и задействовать AVX2/512 или GPU.
Соответственно, либо сделать хранимку на C (с правильной векторизацией) для postgresql, либо взять «тупой» локальный memory-mapped key-value storage.
Если нужна максимальная производительность при поиске, и нет возможности или смысла считать заранее, то придется брать libmdbx/LMDB и руками делить выборку на порции помещающиеся в L1/L2 (оптимальность зависит от CPU) и обрабатывать их параллельно (openmp), либо задействовать GPU.
Исходная версия Deleted, :
На всякий:
-
Никакие индексы тут не помогут, т.е. БД всегда должна будет прочитать все данные.
-
С ростом кол-ва данных сложность будет расти как O(NNL), т.е. довольно быстро узким местом станет вычисление, а не выборка или чтение с диска.
-
Если данных много и нужна скорость, то сами вычисления придется делать «на С» и задействовать AVX2 или GPU.
Соответственно, либо сделать хранимку на C (с правильной векторизацией) для postgresql, либо взять «тупой» локальный memory-mapped key-value storage.
Если нужна максимальная производительность при поиске, и нет возможности или смысла считать заранее, то придется брать libmdbx/LMDB и руками делить выборку на порции помещающиеся в L1/L2 (оптимальность зависит от CPU) и обрабатывать их параллельно (openmp), либо задействовать GPU.