Почему DynamoDB не поддерживает простые агрегаты? - PullRequest
0 голосов
/ 09 июля 2019
  • Почему DynamoDB не поддерживает простые агрегации так же, как их поддерживает mongoDB?

  • Исходя из моих, по общему признанию, ограниченных знаний о базах данных NoSQL, я бы подумал, что будет гораздо эффективнее выполнять агрегацию в БД NoSQL, чем в традиционной RDS, из-за распределенной природы этихбазы данных.

  • Конечно, более эффективно выполнять агрегацию параллельно на небольших порциях данных, когда главный осколок выполняет окончательное агрегирование.Вместо того, чтобы на RDS, где одна машина выполняет операцию над всем набором данных

  • Я понимаю, что вы все еще можете выполнять агрегирование на стороне клиента.Но это кажется гораздо менее эффективным, и для больших наборов данных вы можете отправлять очень большие объемы ненужных данных обратно вашему клиенту

Так почему же DynamoDB не поддерживает простые агрегации?Я что-то здесь упускаю?Действительно ли эти операции лучше подходят для RDS?

Редактировать

Чтобы было ясно, я понимаю, что объединение таблиц становится гораздо более проблематичным в распределенных базах данных.Но, насколько я вижу, те же проблемы не относятся к агрегатам

  • Например, в приведенном ниже запросе мы объединяем таблицу users с таблицей emails.Этот запрос намного эффективнее, если все данные находятся на одном узле, поскольку нам не нужно начинать принимать пользователей с одного узла и проверять, можем ли мы присоединить их к электронным письмам на другом узле

     SELECT * FROM users u INNER JOIN emails e ON u.user_id = e.user_id 
    
  • Однако в приведенном ниже запросе агрегации данные могут быть распределены по сотням узлов.Запрос может быть эффективно обработан на всех узлах, и тогда конечный результат будет, по сути, суммой подзапросов.По сути, это идея карты сокращения парадигмы

     SELECT AVG(age) FROM users GROUP BY nationality
    
...