RedShift или DynamoDb - PullRequest
       3

RedShift или DynamoDb

0 голосов
/ 21 февраля 2020

У меня есть проект с python с пандой данных, мне нужна база данных для сканирования большого количества строк для каждого клиента Теперь в MySql выполнение запросов к базе данных занимает много времени, мне нужна лучшая производительность с новой системой баз данных, но сейчас я не знаю, какой вариант лучше выбрать: RedShift или DynamoDb, потому что мне нужна скорость для выполнения Вставить / удалить / выбрать большой запрос из двух таблиц, ниже я объясню описание работы системы:

Таблицы: sales, sales_simulate, для этих таблиц не требуется реляционный с другими таблицами только столбец client_id, который получает идентификаторы из источника файла данных при начале процесса, этот файл импортируется каждый месяц для имитации данных

Предполагается: система предназначена только для 1 администратора, который работает в vps, только 1 большой запрос для клиента и продаж моделирует и меняет значения каждый месяц, и мне необходимо пересчитать данные за 3 года go, эта система запускать только 1 раз в месяц

ПРОБЛЕМА: Чтобы получить запрос на 30 000 клиентов_id = ~ 8 с
Чтобы получить продажи каждого клиента, возьмите = ~ 4 с
Обработать с помощью python (рассчитать продажи и т. Д.) Потребуется = 2 м
Для удаления / вставки запроса каждые 1 КБ обработанные клиенты 1кк строки = ~ 12м
1к клиентов = ~ 14м
~ 14м * 30к клиентов = 420м / 60 = 7 часов <- всего <br>

Пример данных: У меня 30 тысяч клиентов Мне нужно получить продажи для каждого клиента от 3 лет до текущей даты 1 клиент имеет 4 ~ 10 тыс. Строк реестров продаж, а у меня 30 тыс. Клиентов: 30 тыс. * 4 тыс. = 120 тыс. Макс. 300 тыс. * Пример:

client_id | date                | amount
   1        2019-02-01 12:33:44     100.0
   1        2019-02-01 12:34:44     100.0
   1        2019-02-01 20:54:44     100.0
   2        2019-02-01 08:54:44     62.0
   2        2019-02-01 23:54:44     60.0

Я получаю итоговую сумму даты:

client_id | date                | amount
       1        2019-02-01         300.0
       2        2019-02-01         122.0

Теперь с pandas полными фреймом данных для каждого клиента с 3 года до даты по сегодняшний день:

client_id | date                | amount
   1        2070-02-20         0
   ....
   1        2019-02-01         300.0
  ...
   1        2020-02-20         0

Затем, когда у нас есть фрейм данных со всеми датами всех клиентов, я отправил сохранить в база данных 1.125k строк для каждого клиента: 1.125k * 30k (клиентов) = 33 750 000 строк

Теперь я пытаюсь сохранить данные в каждой части, каждый обработанный клиент 1000k, я сохраняю строки в таблице, 1.125k * 1k = 1 125 000 строк

1 Ответ

0 голосов
/ 21 февраля 2020

В целом:

Amazon Redshift - это хранилище данных. Он превосходен в выполнении сложных SQL запросов к широким таблицам и миллиардам строк. Лучше всего использовать для запросов, а не как хранилище транзакций. (То есть данные должны загружаться навалом, а не обновляться несколькими строками за раз.)

Amazon DynamoDB , будучи нереляционной базой данных, отлично работает и обеспечивает высокую производительность обновление и получение данных на основе указанного ключа c. Однако его не следует использовать для «сканирования» всех сохраненных данных. (Используйте вторичный индекс для поиска данных, основанных на неосновных ключах.)

Итак, если вам не нужны реляционные (SQL) запросы, и вы в основном работаете с одной строкой за раз, DynamoDB идеально. Если вам приходится искать данные во многих строках (например, используя WHERE), тогда рекомендуется использовать реляционную базу данных.

...