我有分布式数据库架构,其中数据存储在多个SQL服务器中。
如何通过运行单个查询来执行选择/更新/删除操作。例如,"select * from employees“应该返回我拥有的所有数据库中的数据。
如何编写跨多个SQL服务器运行的单个查询,并获得到我的web服务器的单个合并视图。
注意:由于SQL服务器的数量可能会在不同的时间发生变化,所以我正在寻找比链接查询更多的东西,因为在规模上(向上或向下)管理链接查询是一件很痛苦的事情
发布于 2009-12-30 21:16:35
要与不同的数据库/连接通信,您将需要一个通过TransactionScope的分布式事务;幸运的是,这实际上比db事务更容易(尽管您需要引用System.Transactions.dll):
using(TransactionScope tran = new TransactionScope()) {
// lots of code talking to different databases / connections
tran.Complete();
}此外,TransactionScope是自然嵌套的,SqlConnection是自动登记的,这使得它非常容易使用。
发布于 2009-12-30 21:16:29
使用TransactionScope。
如果打开与作用域中不同服务器的连接,则事务将与分布式事务相关。
示例:
using (TransactionScope scope = new TransactionScope())
{
conn1.Open(); //Open connection to db1
conn2.Open(); //Open connection to db2
// Don't forget to commit the transaction so it won't rollback
scope.Complete()
}发布于 2009-12-31 04:38:40
这里最好的解决方案是使用Virtual DBMS将您的多个后端混合成一个明显的后端--这样您的查询就会转到Virtual DBMS,然后它会适当地将其转发到实际的数据存储。
OpenLink Virtuoso是一种选择。Virtuoso打开到任何ODBC可访问(包括JDBC可访问,通过ODBC- to -JDBC桥)数据源的连接。
您的数据使用应用程序可以根据需要通过ODBC、JDBC、OLE-DB或ADO.NET连接到Virtuoso。所有远程链接对象(表、视图、存储过程等)通过所有数据访问机制都可用。
虽然您可以使用此处列出的其他技术实现类似的结果,但这些技术要求最终用户了解所有关于后端数据结构的信息,并优化查询本身。使用Virtuoso,内置的基于成本的优化器将根据您链接远程对象时构建的虚拟架构重写查询,以尽可能少的网络流量提供最快的结果。
免责声明:我为OpenLink软件工作,但不会直接受益于任何选择使用我们产品的人。
https://stackoverflow.com/questions/1980139
复制相似问题