Каково разумное время запроса для связанных таблиц с очень большими наборами данных? - PullRequest
0 голосов
/ 10 октября 2008

In StackOverflow подкаст №. 19 , Джо описывает решение Fogcreek иметь одну базу данных на клиента вместо одну базу данных для ВСЕХ клиентов . Это заставляет меня задуматься о следующем.

  1. При условии, что у меня 1000 пользователей .
  2. Каждый пользователь имеет 100 клиентов .
  3. У каждого клиента есть 1000 продуктов .

Это означает, что у меня будет 1000 x 100 x 1000 = 100 000 000 продуктов, связанных с пользователями. Теперь, если я сделаю запрос к таблицам соединения для пользователя и всех продуктов его клиента, каким должно быть разумное количество времени запроса, если я использую для этой цели только одну базу данных?

UPDATE

Может быть, я не был достаточно ясен в своем вопросе. Предположим, что мне нужно выполнять все виды нестандартных запросов (min, max, group и т. Д.) С наборами данных, как описано выше, будет ли это медленно (или нет) до такой степени, что имеет смысл иметь несколько стратегий баз данных, например , 1 БД / клиент, шардинг базы данных и т. Д.

Ответы [ 4 ]

1 голос
/ 11 октября 2008

Основными причинами стратегии «одна база данных на клиента» являются безопасность и управляемость. Хотя концепция резервного копирования / восстановления в одной базе данных, а не в 100 клиентских БД, действительно дает вам выигрыш, она имеет некоторые недостатки. Некоторые проблемы с общей базой данных:

  • Пользователи не могут напрямую отчитываться о базе данных без каких-либо дополнительных мер безопасности (таких как представления), чтобы они не могли видеть данные друг друга. В случае конфиденциальных данных это также становится проблемой соблюдения.

  • Все приложение должно знать о модели безопасности, которая добавляет некоторую степень сложности. Опять же, с конфиденциальными данными это имеет значение соответствия.

  • Заявки на обслуживание или поддержку системы, связанные с данными одного клиента, рискуют, что ошибка повлияет на данные других.

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

Кроме того, учитывая объемы данных и типы отчетов, которые вы описываете, вам может быть лучше создать какую-то подсистему отчетов или витрину данных, которая перемещает отчеты с рабочего сервера. Аналитические отчеты такого рода гораздо более эффективны для схем типа «звезда», чем тип нормализованной схемы, который вы использовали бы в транзакционной базе данных.

1 голос
/ 10 октября 2008

Я думаю, что ответ зависит от вашего выбора СУБД. Например, в случае Oracle 1 большая база данных определенно предпочтительнее, фактически 1000 идентичных баз данных считаются абсурдными и неуправляемыми.

Кроме того, вам никогда не понадобилось бы выполнять запросы между пользователями? например найти пользователя с большинством продуктов. Или это действительно 1000 отдельных «частных» баз данных, и никто не имеет общего доступа к данным? Даже в этом случае, например, Oracle предлагает «Виртуальную частную базу данных» для обслуживания одной базы данных.

0 голосов
/ 10 октября 2008

Если вы хотите получить все это, все столбцы и строки, без фильтрации или агрегирования, вам придется ждать очень долго. Я не думаю, что есть какое-то разумное количество времени, которое вы можете использовать в качестве эталона здесь. Вам просто нужно подождать:)

Но такие типы запросов происходят редко (если вы не переносите свои данные - все еще есть альтернативы). Как правило, вы возвращаете подмножество строк или страницу строк, выбор столбцов или агрегатов. В этом случае «разумная сумма» зависит от типа запроса и используемых вычислений.

0 голосов
/ 10 октября 2008

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

...