Я зараз розробляю нову систему для великого набору геопросторових даних, який потребуватиме швидкого виконання запитів читання. Тому я хочу дізнатися, чи хтось вважає, що це можливо, чи має досвід / поради щодо відповідних СУБД, структури даних чи альтернативних методів для досягнення необхідної продуктивності в наступній ситуації:
Дані будуть постійно вироблятися з оброблених супутникових радіолокаційних даних, які матимуть глобальне покриття. На основі роздільної здатності супутника та покриття земної кулі, я оцінюю повний набір даних для отримання значень у 75 мільярдів дискретних місць на земній кулі. Протягом тривалості життя одного супутника вихід буде виробляти до 300 значень у кожному з цих місць (тому загальний набір даних> 22 трлн. Значень). Це для одного супутника, а на орбіті вже є другий, ще два заплановані на нові кілька років. Так що буде багато даних! Один елемент даних дуже простий і складається лише з (довгота, широта, значення), але завдяки кількості елементів я оцінюю, що один супутник може виробляти до 100 ТБ.
Письмові дані ніколи не потребуватимуть оновлення, оскільки вони лише зростатимуть із обробкою нових придбань супутників. Ефективність запису не важлива, але виконання читання має вирішальне значення. Мета цього проекту - мати можливість візуалізувати дані за допомогою простого інтерфейсу, такого як шар над картами Google, де кожна точка має кольорове значення на основі свого середнього, градієнта чи певної функції з часом. (демонстрація в кінці повідомлення).
Виходячи з цих вимог, базу даних потрібно масштабувати, і ми, швидше за все, будемо дивитись на хмарні рішення. Система повинна мати можливість обробляти геопросторові запити, такі як "точки поблизу (лат., Лон)" та "точки всередині (поле)", і читати продуктивність <1s для розміщення однієї точки та полігони, які містять до 50 000 балів (хоча до 200 000 балів було б кращим).
Поки що у мене є набір тестових даних ~ 750 мільйонів елементів даних у 111 мільйонах місць. Я випробував екземпляр postgres / postGIS, який працював нормально, але без можливості різкості я цього не зможу впоратися, оскільки дані зростають. Я також випробував екземпляр mongoDB, який знову видається так далеко, і при різкому збільшенні можливо, це буде достатньо для масштабування з обсягом даних. Нещодавно я трохи дізнався про еластичний пошук, тому будь-які коментарі з цього приводу були б корисними, оскільки це для мене нове.
Ось коротка анімація того, що ми хочемо досягти за допомогою повного набору даних:
Цей gif (з мого випробування на постгресі) обслуговує (6x3) попередньо обчислені растрові плитки, кожна з яких містить ~ 200 000 балів і займає ~ 17s для їх генерування. Клацнувши по точці, графік складається, витягнувши всі історичні значення у найближчому місці через <1s.
Вибачте за довгий пост, всі коментарі / поради вітаються.