Фон
Місцева база даних містить майже 1,3 мільярда унікальних рядків. Кожен рядок опосередковано асоціюється з певною широтою та довготою (місцем розташування). Кожен рядок має штамп дати.
Використовуйте кейс
Проблема полягає в наступному:
- Користувач встановлює дату початку / закінчення та діапазон значень (наприклад, 100 - 105).
- Система збирає всі рядки, які відповідають заданій даті, згруповані за місцем розташування.
- Система виконує визначення локацій, які протягом цих дат мають статистичну ймовірність потрапляння у заданий діапазон значень.
- Система відображає користувачеві всі відповідні місця.
Це проблема швидкості та масштабу.
Питання
Яка найменш дорога архітектура рішення, яку ви можете собі уявити, яка дозволила б такій системі отримати результати для користувачів за п'ять секунд?
Поточна система
Навколишнє середовище зараз:
- PostgreSQL 8.4 (можливе оновлення; комутація баз даних не є можливою)
- R і PL / R
- XFS
- WD VelociRaptor
- 8 ГБ оперативної пам’яті (Corsair G.Skill; 1,3 ГГц)
- Чотириядерний GenuineIntel 7 (2,8 ГГц)
- Ubuntu 10.10
Можливі оновлення обладнання.
Оновлення - Структура бази даних
Мільярди рядків знаходяться в таблиці, що нагадує:
id | taken | location_id | category | value1 | value2 | value3
- id - Первинний ключ
- прийнято - дата, призначена рядку
- location_id - Посилання на широту / довготу
- категорія - опис даних
- value1 .. 3 - інші значення, які користувач може запитувати
taken
Колона , як правило , послідовні дати , в location_id
, іноді кожне місце має дані від 1800 до 2010 (близько 77000 місць, багато з них продубльовані , як кожне місце має дані в тому ж діапазоні дат).
Існує сім категорій, і таблиці вже розділені за категоріями (використовуючи дочірні таблиці). Кожна категорія містить ~ 190 мільйонів рядків. Найближчим часом кількість рядків на категорію перевищить мільярд.
Є приблизно 20 000 локацій та 70 000 міст. Місця розташування співвідносяться з містом за широтою та довготою. Призначення кожної локації до конкретного міста означає знаходження меж міста, що не є тривіальним завданням.
Ідеї
Деякі у мене ідеї включають:
- Знайдіть хмарний сервіс для розміщення бази даних.
- Створіть смугу нальоту SSD (чудове відео).
- Створіть таблицю, яка об'єднує всі місця за містами (попередній розрахунок).
Дякую!