从数据库中搜索数据..?

时间:2011-02-22 02:50:47

标签: java database jsp

我有一个关于患者账单系统的项目,这是一个组织的网站.. 我使用技术jsp和java来开发这个....

在这个系统中我有不同的组织,每个组织都有自己的数据库 我没有为这个系统维护任何中央数据库.. 在这方面,我的要求是必须由组织明智地完成。

例如,如果我们想知道每个组织中有没有床位,那么它就有了 结果没有组织明智的床位....

我的想法是在我的中央数据库中保存组织静态IP 然后在我们需要时查询数据库..

在此我也怀疑......  是否可以一次查询不同的数据库...... ??

请给我解决我的问题....

提前感谢...

3 个答案:

答案 0 :(得分:1)

如果你需要IP,我想你必须这样做。

我想你最好不要点击主机名,因为它更不太可能改变。

就击中不同的数据库而言,你必须与每个数据库建立连接(尽管你可以根据大小对它们进行聚类,有一些超级节点可以击中那个状态下的所有数据库并行化)但它很容易做到。我的意思是,它几乎就像这一样简单(从逻辑上讲,显然你不能复制/粘贴它。)

for(DatabaseBinding db : databases) {
    Connection conn = db.spawnConnection();
    Statement stmt = ...
    ResultSet rs = stmt.execute(getBedsQuery());
    List<Bed> beds = processResultSetForBeds(rs);
    allBeds.add(beds);
}

答案 1 :(得分:1)

我不知道任何DBMS可以让您执行单个查询来访问多个数据库模式。您最好的两个选择是:

  1. 运行一个了解每个实例的服务(最有可能通过在中央数据库中查找它们),它可以查询每个数据库并聚合结果并将它们返回到主程序。完成此操作后,您很可能会找到此中央服务的其他用途,例如初始化所有实例。
  2. 从单个数据库架构运行所有组织。这称为Multitennant。在大多数表中为组织ID添加一个字段,并将其添加到所有查询和大多数索引中。
  3. 哪种方式更适合您受到多种因素的影响。

    1. 您要处理的组织数量与每个
    2. 的数据量有关
    3. 如果你经常添加或删除组织,那么multitennant将意味着要少得多的管理。
    4. 如果组织之间的数据量差异很大,或者某些组织比其他组织更活跃,那么将它们保存在单独的数据库实例中将允许您更精细地调整负载平衡和备份。

答案 2 :(得分:1)

  

是否可以一次查询不同的数据库?

这取决于你的意思。

  • 如果数据库都使用相同的模式,表名和SQL方言,如果您没有进行更新,并且不需要原子查询,则只需保留一个数据库连接池到不同的数据库,将相同的查询发送到每个数据库,然后手动合并从结果集中提取的内容。

  • 如果数据库模式(或只是表名)不同,那么1)你必须发送不同的查询,2)合并结果可能很繁琐。

  • 如果数据库使用不同的SQL方言,您还必须处理SQL语法,列类型和潜在语义的差异。

  • 跨多个数据库的原子查询和更新很难。您需要使用支持分布式事务的分布式数据库层。

关于Federated Database Systems的维基百科文章可以帮助您理解一些问题。