.Net实现分布式数据库查询2

使用OpenGL加载和显示DXF格式的3D模型文件编程 这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。 阅读详情
摘要 .NET Remoting 作为DCOM的替代,得到了日趋广泛的应用。本文中通过一个分布式数据库查询系统的解决方案,探讨了 Remoting 技术的应用,同时也说明了使用该技术可以非常便捷地构建分布式应用程序。

  关键字 Remoting,应用程序域,远程对象,分布式数据库,ADO.NET

  引言

  随着传统的数据库、计算机网络和数字通信技术的快速发展,以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的关注。微软提供了两种解决方案来为用户实现数据服务,即 .NET Remoting 和 Web Service 技术。众所周知,Web Service 技术已经是业界中一种公认的标准数据传输方案,它基于 HTTP 之上,可以轻松穿过防火墙;而 Remoting 技术则是在 .NET 环境下,在应用程序内部或应用程序域之间传输数据的方案,它有几种通道可以在数据传输中使用,选择适当的通道同样可以达到穿越防火墙。然而,在一个封闭的网络环境中,选择TCP通道将获得更好的连接性能,这种情况下,无疑 .NET Remoting具有明显的优势。

  Remoting 框架简介

  .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这种框架提供了多种服务,包括激活和生存期支持,以及负责与远程应用程序进行消息传输的通讯通道。而且,.NET Remoting 是一个内容丰富的、可扩展的框架,它使得分布在不同应用程序域(AppDomain)、不同进程和不同计算机上的对象可以实现无缝通信。它提供的编程模型和运行时支持,功能强大且非常便捷,能够实现透明的交互。

  理解Remoting框架

  1、基本原理


图1 .NET Remoting体系结构图

  .NET Remoting中通过通道(channel)来实现两个应用程序域之间的对象通信。Remoting的通道主要有两种:Tcp和Http。在.NET中,System.Runtime.Remoting.Channel中定义了IChannel接口。IChannel接口包括了TcpChannel通道类型和Http通道类型。它们分别对应Remoting通道的这两种类型。通道对象代表了到远程应用程序的连接。每个通道对象还包含格式化程序对象,将方法调用转换为已知格式的消息。

  其基本原理如图1所示,首先,客户端通过通道访问服务器端对象,以获得服务器端对象的代理。服务器端对象也即通常所说的远程对象,使用时是通过跨应用程序边界传递对象引用获得该远程对象的代理。对于客户程序来说,代理提供了与远程对象完全一样的方法和属性。当代理的方法别调用时,就会创建消息,通过使用格式化程序类,将这些消息串行化并发送到客户通道中。客户通道和服务器通道进行通信,以通过网络传输消息。服务器通道则使用格式化程序并行化消息,从而将方法发送给远程对象。通过代理,客户端应用程序就可以像使用本地对象一样来操作远程对象。

  2、应用程序域

  Windows操作系统将应用程序分离为单独的进程,形成应用程序代码及其数据的保护边界。虽然进程在隔离应用程序方面是有效的,但同样有缺点:首先,进程属于低级的操作系统结构,管理进程要涉及很多操作系统行为;其次创建和管理进程是一项非常昂贵的任务,如果不采用进程间通信(Interprocess Communication,IPC)机制,在一个进程中执行的代码就不能访问另一进程,而采用IPC 机制的额外开销往往使得最后得不偿失。在很多情况下,我们需要一个对象跨过应用程序域,与另一对象进行交互。.NET 所引入的应用程序域对上述问题进行了很好的解决。应用程序域是 .NET 运行库的逻辑进程表示,任何实际的操作系统进程可以包含多个应用程序域。应用程序域具有以下优点:

  ●隐藏了进程具体的操作系统信息。

  ●应用程序域同样提供了隔离,所有 .NET 对象都界定在创建它的应用程序域中。

  ●对于不需要昂贵的IPC 机制的进程,应用程序域允许 .NET 运行库优化运行于其中的应用程序间的通信。

  3、远程对象的激活方式

  远程对象派生自System.marshalByRefObject类,访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程进行创建并初始化。这种客户端通过通道来创建远程对象的行为称为远程对象的激活。在Remoting中,远程对象的激活分为两大类:

  ●服务器端激活:又称为WellKnown方式,通过这种方式激活的对象称为服务器端激活对象或者知名对象。这是因为服务器端应用程序在激活对象实例之前会通过一个众所周知的统一资源标识符(URI)来发布这个类型。.Net Remoting把服务器端激活又分为Singleton模式和SingleCall模式两种。Singleton模式即指运行库只创建一个对象接受所有的客户端请求,并通过租赁策略控制其生存期;而在SingleCall模式中,运行库将为每个客户端请求建立一个新对象,并在完成请求后释放这个对象,由垃圾收集器(GC)进行销毁。

  ●客户端激活:在这种模式下,一旦服务器端获得客户端的请求,将为每一个客户端都建立一个实例引用。虽然这种模式与服务器端激活的SingleCall模式有些相似,但它们是有区别的:第一,SingleCall模式激活的对象是无状态的,对象生命期的管理是由GC负责的;而客户端激活的对象则有状态,其生命周期可以自定义;第二,SingleCall模式在调用对象方法时创建对象实例,而客户端激活方式在客户发出调用请求时进行实例化;第三,SingleCall模式下,只能调用对象默认的构造函数,不能通过传递参数调用自定义的构造函数来创建对象实例,而客户端激活模式可以调用自定义的构造函数来创建实例。

  4、配置文件

  除了通过编程的方式发布远程对象外,还可以使用配置文件对服务器端应用程序进行配置。使用配置文件的优点在于:

  ● 用户无需修改任何代码,就可以配置通道和远程对象,而且,不需要重新编译应用程序。

  ●大大减少了用于实现远程对象所必须编写的代码。

  下面是一个服务器端通过SingCall模式激活远程对象的配置文件(命名为:DbServer.exe.config):

<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode = "SingleCall"
type = "DbServerLibrary.DbServer, DbServerLibrary"
objectUri = "DbServer "/>

</service>
<channels>
<channel ref = "tcp" port = "8888" />
</channels>
</application>
</system.runtime.remoting>
</configuration>

  如果是客户端激活模式,则把wellknown改为activated,同时删除mode属性。然后,只需要使用下面一行代码就可以发布远程对象:

  RemotingConfiguration.Configure("DbServer.exe.config");

  同样,客户端也可以使用配置文件来获得对远程对象的引用,在使用上述一行代码后,只需要简单使用new运算符(还可采用其他方法)即可以像操作本地对象一样来操作远程对象。由此可见,.NET Remoting为用户提供了非常灵活便捷的方式来发布和获取远程对象,同时提供了方便的部署应用程序方案。

  系统的实现及相关技术

  1、分布式数据库

  分布式数据库是一组逻辑上属同一系统,但物理上分布在计算机网络的不同结点的结构化数据的集合。与集中式数据库相比它有如下主要优点:可解决组织机构分散而数据需要相互联系的问题;均衡负载——可避免临界瓶颈;可靠性高——个别场地发生故障,不致引起整个系统的瘫痪;可扩充性好——可在对当前机构影响最小的情况下进行扩充。

  分布式数据库中的核心问题就是如何来确定数据在计算机网络中各个场地的分配方案,包括数据的分布、分割和冗余设计。本系统中使用了水平分片和诱导分片相结合的分布方案,数据完整性通过表间关系来限定,并通过在程序中捕获异常来向用户报告错误信息。

  2、ADO.NET

  分布式数据库技术具有诸多优点,但同时也带来新的问题,如:数据一致性问题、数据远程传递的实现、通信开销的降低等,使得分布式数据库系统的开发变得较为复杂。解决这些问题的一个理想方案就是采用 .NET框架提供的ADO.NET数据访问模型。ADO.NET通过使用乐观一致性方案来控制数据一致性,能够在更少的时间内响应数量巨大的用户。这两种技术的结合相得益彰,大大简化了开发分布式数据库系统的工作量和难度。

  3、远程对象的实现、发布和获取

  首先,在类库中声明一个派生自MarshalByRefObject 类的远程对象类,其中定义了远程调用所需的服务,如:数据的查询、表间的连接和合并等。利用ADO.NET 的强大功能可以轻松实现各种数据服务,尤其它提供了对SQL SERVER的优化支持,如果底层数据库使用SQL SERVER,将获得比使用其他数据库系统更好的性能。然后通过动态链接库技术将该远程对象类封装为一个 dll,然后分发到各个场地。

  服务器端发布远程对象时,首先要设置一个端口号,然后创建并注册一个通道,最后发布该服务器端的激活对象。其它场地的服务器根据IP地址和网络端口号即可方便地获取所发布的远程对象。实现远程对象发布和获取的关键代码如下:

  远程对象的发布:

TcpChannel chan = new TcpChannel(8888);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(DbServerLibrary.DbServer),"DbServer",
WellKnownObjectMode.Singleton); //以Singleton模式发布该服务器端激活对象

  远程对象的获取:

dbServer = (DbServerLibrary.DbServer)Activator.GetObject(typeof(DbServerLibrary.DbServer),
"tcp://219.224.xx.xx:8888/DbServer");

  4、应用程序的部署

  实现远程对象后,可以采用多种方式进行应用程序的部署,比如,可以将每个服务器端的远程对象程序集(DbServerLibrary.dll)部署到客户端应用程序,为增强安全性也可以通过部署元数据程序集或接口数据集来达到同样的实现。本系统实现时,采用了部署元数据程序集的方式,并进行了以下模拟:同样一台机器通过使用不同的数据库文件,来分别模拟一台服务器和本地客户端。这样,在两台机器上就可以测试本系统。

  系统启动后,首先将各个场地的服务器应用程序启动,通过注册的端口接收客户端发来的请求。客户端在获取用户查询请求后,首先通过SQL命令解析模块,并查询数据字典,将命令进行分解和重组,然后初始化远程对象的代理,将命令分配被相应的远程对象代理,调用远程对象的方法,并将结果集返回,最后在界面上显示结果集,从而完成用户请求。

  总结

  分布式应用程序以其高度的可扩展性和可伸缩性,同时由于资源共享提高了系统的性价比,已经得到广泛的研究和应用,各种分布式计算对象和平台也得到了延伸和拓展。.NET Remoting 是.NET框架提供的一项强大的技术,利用它可以使位于任何位置的应用程序互相通信,这些应用程序可能运行在同一台计算机上,或者局域网内的不同计算机上,也可能位于相隔万里的有巨大差异的网络中。

  使用.NET Remoting技术结合ADO.NET能够高效、可靠地建立分布式数据应用程序的解决方案。其优势在于:通过使用. NET Remoting框架能够方便地解决数据、命令远程传递问题;而通过ADO. NET 对数据库可以方便地进行操作,使分布式数据库系统中对数据库的各种操作更加高效、可靠,同时易于解决数据的完整性和一致性问题 
Langchain cannot connect with Azure SQL Database Langchain 无法连接到 Azure SQL 数据库 阅读详情

相关推荐

利用C#实现分布式数据库查询

本文提出了在.Net环境下使用一种新的开发语言C#结合ADO.Net数据访问模型来开发分布式数据库系统,大大简化了开发过程。

16_分布式搜索引擎在几十亿数据量级的场景下如何优化查询性能?.zip

https://mp.csdn.net/console/uploadResources?spm=1011.2124.3001.4171

.NET Remoting实现分布式数据库查询

远程处理是.NET框架提供的一项强大的技术,利用它可以使位于任何位置的应用程序互相通信,这些应用程序可能在同一台计算机上运行,也可能位于同一局域网中的不同计算机上,或者位于相隔万里的有巨大差异的网络中。使用.NET Remoting技术结合ADO.Net能够高效、可靠地解决这两方面的问题。具体表现为,在C#中通过使用.Net远程处理框架能够方便地解决数据、命令远程传递问题;C#通过ADO.Net数据库进行操作,使分布式数据库系统中对数据库的各种操作变得高效、可靠,同时易于解决数据一致性问题。

.NET Remoting构建分布式数据库查询

严正声明:本文为作者原创,未经允许不得再任意转载。(部分转载者无视他人劳动成果,将作者改为自己,剽窃者的文中没有图示)   第1章 系统总体结构1.1 总体结构图系统实现需要部署服务器端的远程对象(即一个DbServerLibrary.dll),服务器端要注册通道和该远程对象。客户端要实现一个本地查询服务器,同时根据SQL解析的结果向各个服务器发送命令,并将结果显示在客户端界面,服务器端可以...

weixin_34129696的博客 165

分布式数据库查询思想精要

  摘要 .NET Remoting 作为DCOM的替代,得到了日趋广泛的应用。本文中通过一个分布式数据库查询系统的解决方案,探讨了 Remoting 技术的应用,同时也说明了使用该技术可以非常便捷地构建分布式应用程序。   关键字 Remoting,应用程序域,远程对象,分布式数据库,ADO.N

RainyLin-SunnyLin的专栏 1062

数据库查询思考

  本帖是我自己总结所到,也是第一次发贴。即为总结,里面肯定有理解上错误的地方,希望大家指点。语言上只要不是侮辱人的就OK,谢谢大家!当然也希望大家不要太相信我所写,自己验证下好,怕误导,本人不求有功,但求无过; 数据库查询,主要是数据抽取的过程,如何抽取?根据条件,取出数据集;条件可理解为两种:     1、在数据集中进行数据过滤。语句如 A.id =condition,这种语句即为在...

ywz84的专栏 239

分布式数据库系统

分布式数据库在结构上与集中式数据库存在差异。什么差异?集中式数据库是单机版,数据都放在一台机器里,而分布式数据库的数据则散布于网络中。这样的话,分布式数据库查询起来,很有可能需要考察多个节点的数据。那么怎么优化呢? 可以说,集中式数据库分布式数据库查询优化的侧重点不一样。集中式数据库优化主要考虑CPU和IO;而分布式还需要考虑通信代价。相对于CPU和IO的处理速度而言,通信的效率最低,因此,降低通信代价是分布式数据库优化的关键。 分布式数据库中,从查询涉及的数据和查询处理过程中的通信模式来划分,可以分为局

左直拳的马桶_日用桶 4862

分布式数据库查询机制

分布式查询处理的步骤和代价 分布式查询处理的步骤:查询分析→查询分解→查询本地化→全局查询优化→局部优化 分布式查询处理的代价QC估算: 通信代价T估算:T = Σ传输次数(每次传输延迟时间+每次传输数据量/数据传输速率)=Σ传输次数(C0+X/D) 基于等价变换的查询优化 1.分布式查询策略的重要性: 2.基于关系代数等价变换的查询优化 ...

DreamFarLoveNear的博客 4426

android手机设置无标题后,程序挂掉 解决 (如何用最简短语句设置 手机 全屏无标题)

手机设置无标题后,总是挂掉,最初以为是布局的问题,换了还是不中,然后新建一个工程,发现还是不中!怎么回事?我以前是搞过着的啊,原来设置全屏无标题,这些语句一定要设在setContentView前面!谨记啊! 还是对这些知识不熟悉,所以我写到这,复习下! 设置无标题+全屏: requestWindowFeature(Window.FEATURE_NO_TITLE); int flag = Wi

yanzi1225627的专栏 2989

android手机设置无标题后,程序挂掉 解决 (如何用最简短语句设置 手机 全屏无标题)...

手机设置无标题后,总是挂掉,最初以为是布局的问题,换了还是不中,然后新建一个工程,发现还是不中!怎么回事?我以前是搞过着的啊,原来设置全屏无标题,这些语句一定要设在setContentView前面!谨记啊! 还是对这些知识不熟悉,所以我写到这,复习下! 设置无标题+全屏: requestWindowFeature(Window.FEATURE_NO_TITLE);int flag = Wi...

网站开发初中级代码参考-转载 270

刚打完电话就弹出广告?警惕手机里的“吸血”伪装应用!

近期,网络安全研究机构揭露了一种新型的流氓广告骗局(被称为“AfterCall”/通话后流氓广告)。今天我们就用最接地气的方式,带你搞懂这个套路,并教你如何彻底根除它!

网络研究观 227

Android自动聚焦、摄像头拍照、缩放至标准大小的完整实现

为什么把自动聚焦放在前面呢?因为前文http://blog.csdn.net/yanzi1225627/article/details/7738736已经实现了拍照功能,且网上拍照

dearbaba_1666的博客 376

Windows Phone 7开发一月谈(3)

如何获知手机与PC相连 Spb Shell 技术研究 windows mobile 6.0 C# 如何获得 SIM卡 ICCID ? mobile上如何掉用API来挂掉电话 关于全屏程序下输入法的显示 问个获取主机IP地址的问题? 在设置-电话界面中铃声播放问题 怎样获取TAPI的LINECALLSTATE_RINGBACK消息 DirectShow CoCr...

weixin_34379433的博客 178

长沙红胖子Qt·西安(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

长沙红胖子 Qt・西安,本人拥有省级科研团队从业背景,研发团队产出所有项目、产品方案和研发无分包、无外包、无AI代笔,长期深耕双一流体系高精尖技术配套研发。博客主动剥离复杂底层工况机理,专注沉淀高端、特种行业领域Qt工程化落地实战经验。所有内容均为个人梳理总结的通用性工程方法论,只输出可公开的普适技术思路。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 163万+

四种高效数据库设计思想——提高查询效率

【开篇】设计数据库表结构时,我们首先要按照数据库的三大范式进行建立数据库。 1. 1NF每列不可拆分 2. 2NF确保每个表只做一件事情 3. 3NF满足2NF,消除表中的依赖传递。 三大范式的出现是在上世纪70年代,由于内存资源比较昂贵,所以严格按照三大范式进行数据库设计。而如今内存变得越来越廉价,在考虑效率和内存的基础上我们可以做出最优选择以达到最高效率。建立数据库

没有伞的孩子必须努力奔跑!—小林 1万+

ScottPlotdll

适用于.net framework4.6.2

上一篇: .NET Remoting 实现分布式数据库查询
下一篇: 在 .NET 中使用 BDP 和 DB2 UDB 构建分布式数据库应用程序3
HUYOUHUI
博客等级 码龄20年 3粉丝 16原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值