Я не слишком знаком с ними (я только что прочитал те же блоги / новости / примеры, что и все остальные), но я полагаю, что они решили пожертвовать многими обычными функциями реляционных БД в названии. масштабируемости - попробую объяснить.
Представьте, что в вашей таблице данных 200 строк.
В центре данных Google 50 из этих строк хранятся на сервере A, 50 на B и 100 на сервере C. Кроме того, сервер D содержит избыточные копии данных с серверов A и B, а сервер E содержит избыточные копии данных на сервер C.
(В реальной жизни я понятия не имею, сколько серверов будет использоваться, но он настроен на работу со многими миллионами строк, поэтому я представляю довольно много).
Чтобы "выбрать *, где name = 'orion'", инфраструктура может запустить этот запрос ко всем серверам и агрегировать результаты, которые возвращаются. Это позволяет им линейно масштабировать столько серверов, сколько им нужно (к вашему сведению, это почти то же, что и mapreduce)
Это, однако, означает, что вам нужны некоторые компромиссы.
Если вам нужно было выполнить реляционное соединение для некоторых данных, где они были распределены, скажем, на 5 серверах, каждому из этих серверов нужно было бы получать данные из каждого другого для каждой строки . Попробуйте сделать это, когда у вас есть 2 миллиона строк на 10 серверах.
Это приводит к компромиссу № 1 - нет объединений.
Кроме того, в зависимости от задержки в сети, нагрузки на сервер и т. Д. Некоторые из ваших данных могут быть сохранены мгновенно, но некоторые могут занять секунду или 2. Опять же, когда у вас есть десятки серверов, это становится все длиннее и дольше нормальный подход «все просто ждут, пока самый медленный парень закончил» больше не становится приемлемым.
Это приводит к компромиссу №2. Ваши данные не всегда могут быть сразу видны после их записи.
Я не уверен, какие еще есть компромиссы, но, в общем-то, это главные 2.