Подтвердить что ты не робот

Присоединяйтесь к NOSQL

Я прочитал некоторые статьи о Bigtable и NOSQL. Очень интересно, что они избегают операций JOIN.

В качестве базового примера позвольте взять таблицу Employee and Department и предположить, что данные распространяются на несколько таблиц/серверов.

Просто хотите знать, распространяются ли данные на нескольких серверах, как мы выполняем операции JOIN или UNION?

4b9b3361

Ответ 1

Когда у вас очень большие данные, вы, вероятно, захотите избежать объединения. Это связано с тем, что накладные расходы на индивидуальный поиск ключей относительно велики (службе необходимо выяснить, какие node запрашивать, а также запрашивать их параллельно и ждать ответов). Сверху я подразумеваю задержку, а не ограничение пропускной способности.

Это приводит к тому, что соединения сосают очень плохо, так как вам нужно будет делать много запросов внешнего ключа, которые в конечном итоге будут поступать во многие, многие разные узлы (во многих случаях). Поэтому вы хотите избежать этого как шаблона.

Если это происходит не очень часто, возможно, вы можете воспользоваться хитом, но если вы захотите сделать много из них, возможно, стоит "денормализовать" данные.

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

Кроме того, большинство nosql не поддерживают (действительно) вспомогательные индексы, что означает, что вы должны дублировать материал, если хотите запросить любой другой критерий.

Если вы храните данные, такие как сотрудники и отделы, вам действительно лучше с обычной базой данных.

Ответ 2

Вам нужно будет сделать несколько выборок и объединить данные вручную в своем приложении. Подробнее см. этот пост.. Из этого сообщения:

Биллигатные наборы данных могут запрашиваться у таких сервисов, как AppEngine, с использованием языка GQL ( "gee-kwal" ), который основан на подмножестве SQL. Заметно отсутствует в GQL любая команда JOIN. Из-за распределенного характера базы данных Bigtable выполнение соединения между двумя таблицами было бы ужасно неэффективным. Вместо этого программист должен реализовать такую ​​логику в своем приложении или разработать свое приложение, чтобы оно не нуждалось в нем.

Ответ 3

Калеб право. Вы пишете собственный код с помощью решения NoSQL, если ваши данные не помещаются в хранилище ключей. Обработка карт-сокращение/асинхронная обработка и кэширование пользовательских представлений являются общими. Брайан Акер дал очень забавную (и сатирическую и предвзятую) презентацию в Nov 2009 OpenSQLCamp http://www.youtube.com/watch?v=LhnGarRsKnA. Пропустите через 40 секунд, чтобы узнать о соединениях.

Ответ 4

Я знаю, что это старый вопрос, но это лучший результат в Google, поэтому, возможно, стоит сказать, что Couchbase, будучи базой "NoSQL", имеет реализацию SQL под названием N1QL, который имеет присоединяется. И в определенных обстоятельствах они могут быть довольно performant.

Ответ 5

Я согласен с некоторыми комментариями, если вы хотите присоединиться к ДВА ОЧЕНЬ БОЛЬШИХ наборов данных. Но в noSQL вы также можете использовать playOrm и иметь 1 триллион сделок, но иметь 1 миллиард разделов, а затем вы можете присоединиться к одному из разделов с чем-то другим. Этот прецедент действительно широко распространен на самом деле.

У нас был один клиент, у которого было это, и мы разделили сделки на Учетную запись, чтобы мы могли получить раздел для учетной записи # 4567 и запросить в этот раздел и объединить его с другой небольшой таблицей или другим большим разделом таблиц.

playOrm делает возможным объединение с помощью простого языка JQL/HQL и скорого инструмента для запросов ad-hoc.

позже, Дин