поиск данных из базы данных ..? - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть проект о системе выставления счетов пациентам, который является веб-сайтом для организации. и я использую технологии JSP и Java для разработки этого ....

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

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

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

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

пожалуйста, дайте мне какое-нибудь решение для моей проблемы ....

заранее спасибо ...

Ответы [ 3 ]

1 голос
/ 22 февраля 2011

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

  1. Запустите службу, которая знает о каждом экземпляре (вероятнее всего, путем поиска их в центральной базе данных, как вы говорите), которая может запрашивать каждую базу данных и агрегировать результаты и возвращать их в вашу основную программу. После этого вы, скорее всего, найдете другие варианты использования этой центральной службы, например, инициализацию всех экземпляров.
  2. Запуск всех организаций из единой схемы базы данных. Это называется Мультитеннант . Добавьте в большинство таблиц поле для идентификатора организации и добавьте его во все ваши запросы и большинство ваших индексов.

На то, что будет работать лучше для вас, влияет несколько факторов.

  1. Сколько организаций вы имеете дело с количеством данных для каждого
  2. Если вы достаточно регулярно добавляете или удаляете организации, мультитенантность будет означать гораздо меньше административных действий.
  3. Если объем данных сильно различается в разных организациях или у вас есть организации, которые гораздо более активны, чем другие, то хранение их в отдельных экземплярах базы данных позволит вам более точно настроить балансировку нагрузки и резервное копирование.
1 голос
/ 22 февраля 2011

можно ли одновременно запрашивать разные базы данных?

Это зависит от того, что вы имеете в виду.

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

  • Если схемы базы данных (или только имена таблиц) отличаются, то 1) вам нужно отправлять разные запросы и 2) объединение результатов может быть затруднительным.

  • Если базы данных используют разные диалекты SQL, вам также придется иметь дело с различиями в синтаксисе SQL, типах столбцов и, возможно, семантике.

  • Атомарные запросы и обновления для нескольких баз данных сложны. Вам необходимо использовать слой распределенной базы данных, который поддерживает распределенные транзакции.

Статья Википедии о Федеративных системах баз данных может помочь вам разобраться в некоторых проблемах.

1 голос
/ 22 февраля 2011

Если IP - это все, что вам нужно, я думаю, вы должны это сделать.

Я полагаю, что вам лучше использовать имя хоста, поскольку вероятность его изменения намного ниже.

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

for(DatabaseBinding db : databases) {
    Connection conn = db.spawnConnection();
    Statement stmt = ...
    ResultSet rs = stmt.execute(getBedsQuery());
    List<Bed> beds = processResultSetForBeds(rs);
    allBeds.add(beds);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...