Я нахожусь в процессе разработки новой системы для большого набора геопространственных данных, которая потребует быстрой обработки запросов на чтение. Поэтому я хочу посмотреть, думает ли кто-нибудь, что это возможно, или имеет опыт / совет относительно подходящих СУБД, структуры данных или альтернативных методов для достижения требуемой производительности в следующей ситуации:
Данные будут непрерывно получаться из обработанных спутниковых радиолокационных данных, которые будут иметь глобальный охват. Исходя из спутникового разрешения и охвата земного шара, я оцениваю полный набор данных для получения значений в 75 миллиардах дискретных точек земного шара. В течение срока службы одного спутника выходной сигнал будет давать до 300 значений в каждом из этих местоположений (таким образом, общий набор данных> 22 триллионов значений). Это для одного спутника, а на орбите уже есть второй, а еще два планируется в ближайшие несколько лет. Так что данных будет много! Один элемент данных очень прост и будет состоять только из (долготы, широты, значения), но из-за количества элементов, по моим оценкам, один спутник может произвести до 100 ТБ.
Записанные данные никогда не должны обновляться, поскольку они будут только расти по мере обработки новых спутниковых приобретений. Производительность записи не важна, но производительность чтения имеет решающее значение. Цель этого проекта - иметь возможность визуализировать данные через простой интерфейс, такой как слой поверх карт Google, где каждая точка имеет цветное значение, основанное на ее среднем значении, градиенте или некоторой функции во времени. (демо в конце поста).
Исходя из этих требований, база данных должна быть масштабируемой, и мы, вероятно, обратимся к облачным решениям. Система должна иметь возможность обрабатывать геопространственные запросы, такие как «точки рядом (широта, долгота)» и «точки внутри (прямоугольник)», и иметь скорость чтения <1 с для определения местоположения одной точки, а также полигоны, которые содержат до 50000 баллов (хотя до 200 000 баллов будет предпочтительнее).
На данный момент у меня есть набор тестовых данных из ~ 750 миллионов элементов данных в 111 миллионах точек. Я опробовал экземпляр postgres / postGIS, который работал нормально, но без возможности разделения я не смогу справиться с этим по мере роста данных. Я также опробовал экземпляр mongoDB, который снова кажется OK, так что далеко, и с шардингом может быть достаточно масштабировать с объемом данных. Недавно я немного узнал об упругом поиске, поэтому любые комментарии по этому поводу были бы полезны, так как это ново для меня.
Вот быстрая анимация того, чего мы хотим достичь с полным набором данных:
Этот gif (из моего теста postgres) обслуживает (6x3) предварительно вычисленные растровые тайлы, каждый из которых содержит ~ 200 000 точек и ~ 17 с, чтобы сгенерировать каждый. При щелчке по точке график составляется путем извлечения всех исторических значений в ближайшем месте за <1 с.
Извиняюсь за длинный пост, все комментарии / советы приветствуются.