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

利用C#实现分布式数据库查询,第1张

随着传统的数据库 计算机网络和数字通信技术的飞速发展 以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的关注 但由于其开发较为复杂 在一定程度上制约了它的发展 基于此 本文提出了在 Net环境下使用一种新的开发语言C#结合ADO Net数据访问模型来开发分布式数据库系统 大大简化了开发过程

分布式数据库系统

就其本质而言 分布式数据库系统的数据在逻辑上是统一的 而在物理上却是分散的 与集中式数据库相比它有如下主要优点

· 解决组织机构分散而数据需要相互联系的问题

· 均衡负载 负载在各处理机间分担 可避免临界瓶颈

· 可靠性高 数据分布在不同场地 且存有多个副本 即使个别场地发生故障 不致引起整个系统的瘫痪

· 可扩充性好 当需要增加新的相对自主的组织单位时 可在对当前机构影响最小的情况下进行扩充

分布式数据库系统虽然有诸多优点 但它同时也带来了许多新问题 如 数据一致性问题 数据远程传递的实现 通信开销的降低等 这使得分布式数据库系统的开发变得较为复杂 幸运的是 微软的 Net开发环境为我们提供了C#开发语言和ADO Net数据访问模型 结合两者来开发分布式数据库系统能够大大简化开发工作

远程处理框架和ADO Net

开发分布式数据库系统需要解决的两个重要问题是 各场地间的数据通信以及对数据库的 *** 作及管理 使用C#结合ADO Net能够高效 可靠地解决这两方面的问题 具体表现为 在C#中通过使用 Net远程处理框架能够方便地解决数据 命令远程传递问题 C#通过ADO Net对数据库进行 *** 作 使分布式数据库系统中对数据库的各种 *** 作变得高效 可靠 同时易于解决数据一致性问题

Net远程处理框架

实现数据和命令的远程传递有三种方式 第一种是使用报文或消息的方式 把要传送的数据转化为流格式 再通过套接字编程用报文的形式发送到远程主机 此种方法麻烦 不易实现 第二种是使用Web Service 即各远程主机提供一个数据库查询服务的Web Service 这种方式只能对单个场地进行查询 无法实现多场地的联合查询 第三种是使用 Net远程处理框架( Net Remoting Framework)技术 它将远程调用的技术细节隐藏起来 服务程序只需通过简单的设置就可以把本地对象变成为远程提供服务的远程对象 客户端可以像访问本地对象一样透明地访问远程对象 所有的消息 报文等都交给 Net Remoting对象处理 大大简化了开发 远程处理的一般过程如图 所示

图 远程处理过程

首先 服务器端创建一个服务器类的实例 远程处理系统创建一个表示该类的代理对象 并向客户端对象返回一个对该代理的引用 当客户端调用方法时 远程处理基础结构连接检查类型信息 并通过信道将该调用发送到服务器进程 侦听信道获得该请求并将其转发给服务器远程处理系统 服务器远程处理系统查找(或在必要时创建)并调用被请求的对象 然后 此过程将反向进行 服务器远程处理系统将响应捆绑成消息并由服务器信道发送到客户端信道 最后 客户端远程处理系统通过代理将调用的结果返回给客户端对象

ADO Net

ADO Net以XML为核心 是 Net数据库应用程序的解决方案 它使用离线数据结构 数据源中的数据被缓存到数据集(DataSet)对象中 用户无须锁定数据源 数据以XML格式保存

ADO Net管理数据一致性

在分布式数据库系统中 很可能出现多个用户同时访问和修改数据的情况 因此 对于分布式数据库系统 数据一致性是不可或缺的 ADO Net通过使用乐观一致性方案来控制数据一致性(实际上DataSet对象被设计成支持使用乐观一致性控制机制) 即数据行只有在数据库中真正被更新时才会被锁定 而在悲观一致性方案中 数据行在从被提取出来到在数据库中更新这段时间内一直被锁定 因此 使用ADO Net能够在更少的时间内响应数量巨大的用户

另外 在分布式数据库系统中 还会经常遇到当用户修改自从提取出来以来已经被修改的行时 违反一致性原则 对此问题ADO Net也作了很好地解决 即使用DataSet对象为每一条修改过的记录维护两个版本 原始版本和更新版本 在更新的记录被写回数据库之前 先要把数据集中记录的原始版本与数据库中的当前版本进行比较 如果两个版本匹配 就在数据库中更新记录 否则 就会出现违反一致性原则的错误

实例开发

一个家用电器连锁店设有一个总部和许多分店 总部和分店以及各分店之间经常需要进行各种信息的查询(如 商品当日价目表 各店销售状况和库存信息等) 对此组织机构建立分布式数据库查询系统 可实现总部和各店信息的共享 便于统一管理

系统设计

系统结构图

系统结构如图 所示

图 系统结构图

总部和各分店都配置了一台具有固定IP的服务器 其它电脑通过集线器与服务器相连 总部和各分店的服务器通过通信网络联接起来

系统实现步骤

系统实现分为三个主要步骤 首先 为总部和各分店设计数据库 由于数据量较大 故采用SQL Server为每个分店创建销售和库存数据库 同时为总部创建员工数据库 整个连锁店的存货数据库 xyk客户数据库以及供应商信息数据库等 其次 需要建立一个提供数据库服务(DbServer)的动态链接库(dll) 将查询时所要用到的一些服务(如 远程对象的发布和获取等)和函数(如 本地异地数据表的查询 数据表的远程创建和删除 表间的连接和合并等)置入该dll中 各分店都需要使用这个dll 以便查询时对一些服务和函数进行调用 最后 根据实际需要开发客户端查询界面

系统实现的关键技术

远程对象的发布与获取

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

远程对象的发布

//创建一个通道实例 port为指定的网络端口号TcpChannel MyChannel= new TcpChannel (Int Parse(port));//注册通道ChannelServices RegisterChannel(MyChannel);//发布该服务器端激活对象RemotingConfiguration RegisterWellKnownServiceType( typeof ( DbServer ) STORE WellKnownObjectMode Singleton);远程对象的获取 //根据IP地址和端口号获取相应的远程对象try{myDbServer=(DbServer)Activator GetObject(typeof(DbServer) tcp:// +ip+ : +p+ /STORE ); }//捕捉异常 catch( NullReferenceException nullExp ){MessageBox Show( 指定的url地址不可到达 + nullExp Message );}catch( RemotingException remExp ){MessageBox Show( 指定获得的对象定义不对 + remExp Message );}

数据库的访问

通过ADO Net访问数据库 可以方便地连接数据库 将数据源中的数据导入DataSet对象中 在DataSet对象中可对数据表进行各种 *** 作 而且DataSet对象本身也可远程传递 这为开发分布式数据库系统带来极大方便 实现数据库访问的关键代码如下所示

//建立数据库的连接 string SqlConn = Initial Catalog=Store;Data Source=Localhost;Userid=sa;Password=; ;SqlConnection Conn= new SqlConnection(SqlConn);Conn Open();//打开数据库//将数据源中的数据导入到数据集对象try{ DataSet ds = new DataSet();DataTable dt=new DataTable( Result );SqlDataAdapter adapter=new SqlDataAdapter();SqlCommand mySqlDataSetCmd =new SqlCommand(CmdString Conn);//CmdString为要执行的命令adapter SelectCommand= mySqlDataSetCmd;adapter Fill(dt);ds Tables Add(dt); }finally{ Conn Close();//关闭数据库的连接} 

查询

分布式数据库系统中的查询一般分为三类 本地查询 远程查询和联合查询 本地查询和集中式数据库的查询没什么区别 对于远程查询 只要获取远程对象后 调用查询函数 即可方便地实现 最复杂的是联合查询 涉及到多场地之间数据的查询 表的远程创建 传递 连接 合并等技术 下面以实例介绍联合查询的实现

第二连锁店要查询离其较近的第三 第四连锁店中所有北京的供应商所供应的空调的库存信息以便调货 可通过以下步骤实现 首先 获取总部以及第三 第四连锁店所发布的远程对象 接着 通过远程对象在总部创建一临时数据表t 将查询到的所有北京的供应商信息存放在t 表中(各分店只有供应商名 并不知其所在地 只有总部才有供应商的详细信息) 再将t 表保存到第三和第四连锁店 然后让t 表分别与两店的库存表作连接 找出所有北京供应商所供应的空调库存信息(如空调名称 型号 个数 价格等信息) 并将连接结果t 和t 数据表返回到第二连锁店 最后对t 和t 两表进行合并 并使用DataGrid控件显示出来 上述实现中 包含了不同场地之间数据表的复制 传递 连接等 所用到的一些函数(如 远程创建数据表 表与表间的远程连接 合并等)都放在dll中 可以方便地调用

结束语

lishixinzhi/Article/program/ASP/201311/21698

一个分布式数据库在用户面前为单个逻辑数据库,但实际上是由存储在多台计算机上的一组数据库组成

在几台计算机上的数据库通过网络可同时修改和存取,每一数据库受它的局部的DBMS控制

分布式数据库中每一个数据库服务器合作地维护全局数据库的一致性

在系统中的每一台计算机称为结点

如果一结点具有管理数据库软件,该结点称为数据库服务器

如果一个结点为请求服务器的信息的一应用,该结点称为客户

在ORACLE客户,执行数据库应用,可存取数据信息和与用户交互

在服务器,执行ORACLE软件,处理对ORACLE数据库并发、共享数据存取

ORACLE允许上述两部分在同一台计算机上,但当客户部分和服务器部分是由网连接的不同计算机上时,更有效

分布处理是由多台处理机分担单个任务的处理

在ORACLE数据库系统中分布处理的例子如:客户和服务器是位于网络连接的不同计算机上

单台计算机上有多个处理器,不同处理器分别执行客户应用

SQLNET是ORACLE网络接口,允许运行在网络工作站的ORACLE工具和服务器上,可存取、修改、共享和存储在其它服务器上的数据

SAQLNET可被认为是网络通信的程序接口

SQLNET利用通信协议和应用程序接口(API)为OARCLE提供一个分布式数据库和分布处理

SQLNET驱动器为在数据库服务器上运行的ORACLE进程与ORACLE工具的用户进程之间提供一个接口

参与分布式数据库的每一服务器是分别地独立地管理数据库,好像每一数据库不是网络化的数据库

每一个数据库独立地被管理,称为场地自治性

场地自治性有下列好处:◆系统的结点可反映公司的逻辑组织

◆由局部数据库管理员控制局部数据,这样每一个数据库管理员责任域要小一些,可更好管理

◆只要一个数据库和网络是可用,那么全局数据库可部分可用

不会因一个数据库的故障而停止全部 *** 作或引起性能瓶颈

◆故障恢复通常在单个结点上进行

◆每个局部数据库存在一个数据字典

◆结点可独立地升级软件

可从分布式数据库的所有结点存取模式对象,因此正像非分布的局部的DBMS,必须提供一种机制,可在局部数据库中引用一个对象

分布式DBMS必须提供一种命名模式,以致分布式数据库中一个对象可在应用中唯一标识和引用

一般彩在层次结构的每一层实施唯一性

分布式DVMS简单地扩充层次命名模型,实施在网络上唯一数据库命名

因此一个对象的全局对象名保证在分布式数据库内是唯一

ORACLE允许在SQL语句中使用佤对象名引用分布式数据库中的模式对象(表、视图和过程)

在ORACLE中,一个模式对象的全局名由三部分组成:包含对象的模式名、对象名、数据库名、其形式如:SCOTT

EMP@SALES

DIVISION3

ACME

COM其中SCOTT为模式名,EMP为表名,@符号之后为数据库名

一个远程查询为一查询,是从一个或多个远程表中选择信息,这些表驻留在同一个远程结点

一个分布式查询可从两个或多个结点检索数据

一个分布式更新可修改两个或两个以上结点的数据

一个远程事务为一个事务,包含一人或多个远程语句,它所引用的全部是在同一个远程结点上

一个分布式事务中一个事务,包含一个或多个语句修改分布式数据库的两个或多个不同结点的数据

在分布式数据库中,事务控制必须在网络上直辖市,保证数据一致性

两阶段提交机制保证参与分布式事务的全部数据库服务器是全部提交或全部回滚事务中的语句

ORACLE分布式数据库系统结构可由ORACLE数据库管理员为终端用户和应用提供位置透明性,利用视图、同义词、过程可提供ORACLE分布式数据库系统中的位置透明性

ORACLE允许在SELECT(查询)、INSERT、UPDATE、DELETE、SELECTFORUPDATE和LOCKTABLE语句中引用远程数据

对于查询,包含有连接、聚合、子查询和SELECTFORUPDATE,可引用本地的、远程的表和视图

对于UPDATE、INSERT、DELETE和LOCKTABLE语句可引用本地的和远程的表

注意在引用LONG和LONGRAW列、序列、修改表和封锁表时,必须位于同一个结点

ORACLE不允许作远程DDL语句

在单场地或分布式数据库中,所有事务都是用COMMIT或ROLLBACK语句中止

ORACLE提供两种机制实现分布式数据库中表重复的透明性:表快照提供异步的表重复;触发器实现同步的表的重复

在两种情况下,都实现了对表重复的透明性

分布式数据库是一个逻辑数据库,它的物理数据库在地理位置上分布在多个数据库管理系统的计算机网络中,这些数据库系统构成了分布式的数据库管理系统

在分布式数据库管理系统中,每台计算机上的用户在访问数据库时并不感到他使用的数据在物理上不存储在自己的计算机中,而是由分布式数据库系统由网络从其它机器中传输过来

因此,对每一用户来说,看到的都是一个统一的概念模式

分布式数据库系统的主要特点是:(1)具有较高的可靠性,当系统中一台机器发生故障时、不会导致整个系统的破坏

当故障排除后,分布式数据库系统可将故障期间的数据库加以恢复修改

(2)分散了工作负荷,使大量的处理均匀分担

(3)便于实现系统的扩充

分布式数据库系统是计算机通讯和数据库技术相结合的产物,是非常有代表性的数据库技术发展方向之一

1、分布式数据库是数据库的一种,是数据库技术和网络技术的结合产物。

2、各有优点和缺点分布式数据库分为逻辑上分部物理上分布及逻辑上分布物理上集中两种。

3、分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都有DBMS的一份完整拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的大型数据库。

数据库与hadoop与分布式文件系统的区别和联系

1 用向外扩展代替向上扩展

扩展商用关系型数据库的代价是非常昂贵的。它们的设计更容易向上扩展。要运行一个更大

的数据库,就需要买一个更大的机器。事实上,往往会看到服务器厂商在市场上将其昂贵的高端机

标称为“数据库级的服务器”。不过有时可能需要处理更大的数据集,却找不到一个足够大的机器。

更重要的是,高端的机器对于许多应用并不经济。例如,性能4倍于标准PC的机器,其成本将大大

超过将同样的4台PC放在一个集群中。Hadoop的设计就是为了能够在商用PC集群上实现向外扩展

的架构。添加更多的资源,对于Hadoop集群就是增加更多的机器。一个Hadoop集群的标配是十至

数百台计算机。事实上,如果不是为了开发目的,没有理由在单个服务器上运行Hadoop。

2 用键/值对代替关系表

关系数据库的一个基本原则是让数据按某种模式存放在具有关系型数据结构的表中。虽然关

系模型具有大量形式化的属性,但是许多当前的应用所处理的数据类型并不能很好地适合这个模

型。文本、和XML文件是最典型的例子。此外,大型数据集往往是非结构化或半结构化的。

Hadoop使用键/值对作为基本数据单元,可足够灵活地处理较少结构化的数据类型。在hadoop中,

数据的来源可以有任何形式,但最终会转化为键/值对以供处理。

3 用函数式编程(MapReduce)代替声明式查询(SQL )

SQL 从根本上说是一个高级声明式语言。查询数据的手段是,声明想要的查询结果并让数据库引擎

判定如何获取数据。在MapReduce中,实际的数据处理步骤是由你指定的,它很类似于SQL

引擎的一个执行计划。SQL 使用查询语句,而MapReduce则使用脚本和代码。利用MapReduce可

以用比SQL 查询更为一般化的数据处理方式。例如,你可以建立复杂的数据统计模型,或者改变

图像数据的格式。而SQL 就不能很好地适应这些任务。

4

分布式文件系统(dfs)和分布式数据库都支持存入,取出和删除。但是分布式文件系统比较暴力,

可以当做key/value的存取。分布式数据库涉及精炼的数据,传统的分布式关系型数据库会定义数据元

组的schema,存入取出删除的粒度较小。

分布式文件系统现在比较出名的有GFS(未开源),HDFS(Hadoop distributed file system)。

分布式数据库现在出名的有Hbase,oceanbase。其中Hbase是基于HDFS,而oceanbase是自己内部

实现的分布式文件系统,在此也可以说分布式数据库以分布式文件系统做基础存储。

共享文件与分布式文件系统的区别

分布式文件系统(Distributed File System,DFS)

如果局域网中有多台服务器,并且共享文件夹也分布在不同的服务器上,这就不利于管理员的管理和用户的访问。而使用分布式文件系统,系统管理员就可以把不同服务器上的共享文件夹组织在一起,构建成一个目录树。这在用户看来,所有共享文件仅存储在一个地点,只需访问一个共享的DFS根目录,就能够访问分布在网络上的文件或文件夹,而不必知道这些文件的实际物理位置。

ftp server和分布式文件系统的区别

换个思路,使用mount --bind把目录加载过来就可以了 先将数据盘挂载 mount /dev/sdb1 /mnt/d 在ftp目录下建一个文件夹data mount --bind /mnt/d data

FTP server和分布式文件系统的区别, 分布式文件系统和分布式数据库有什么不同

分布式文件系统(dfs)和分布式数据库都支持存入,取出和删除。但是分布式文件系统比较暴力,可以当做key/value的存取。分布式数据库涉及精炼的数据,传统的分布式关系型数据库会定义数据元组的schema,存入取出删除的粒度较小。

分布式文件系统现在比较出名的有GFS(未开源),HDFS(Hadoop distributed file system)。分布式数据库现在出名的有Hbase,oceanbase。其中Hbase是基于HDFS,而oceanbase是自己内部实现的分布式文件系统,在此也可以说分布式数据库以分布式文件系统做基础存储。

hadoop是分布式文件系统吗

是的

Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统。

1分布式文件系统

多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统。

分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储。换句话说,它们是横跨在多台计算机上的存储系统。存储在分布式文件系统上的数据自动分布在不同的节点上。

分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理来自网络和其它地方的超大规模数据提供所需的扩展能力。

2分离元数据和数据:NameNode和DataNode

存储到文件系统中的每个文件都有相关联的元数据。元数据包括了文件名、i节点(inode)数、数据块位置等,而数据则是文件的实际内容。

在传统的文件系统里,因为文件系统不会跨越多台机器,元数据和数据存储在同一台机器上。

为了构建一个分布式文件系统,让客户端在这种系统中使用简单,并且不需要知道其他客户端的活动,那么元数据需要在客户端以外维护。HDFS的设计理念是拿出一台或多台机器来保存元数据,并让剩下的机器来保存文件的内容。

NameNode和DataNode是HDFS的两个主要组件。其中,元数据存储在NameNode上,而数据存储在DataNode的集群上。NameNode不仅要管理存储在HDFS上内容的元数据,而且要记录一些事情,比如哪些节点是集群的一部分,某个文件有几份副本等。它还要决定当集群的节点宕机或者数据副本丢失的时候系统需要做什么。

存储在HDFS上的每份数据片有多份副本(replica)保存在不同的服务器上。在本质上,NameNode是HDFS的Master(主服务器),DataNode是Slave(从服务器)。

文件系统与数据库系统的区别和联系

其区别在于:

(1)

文件系统用文件将数据长期保存在外存上,数

据库系统用数据库统一存储数据。

(2)

文件系统中的程序和数据有一

定的联系,数据库系统中的程序和数据分离。

(3)

文件系统用 *** 作系

统中的存取方法对数据进行管理,数据库系统用

DBMS

统一管理和控

制数据。

(4)

文件系统实现以文件为单位的数据共享,数据库系统实

现以记录和字段为单位的数据共享。

其联系在于:

(1)

均为数据组织的管理技术。

(2)

均由数据管理软

件管理数据,程序与数据之间用存取方法进行转换。

(3)

数据库系统

是在文件系统的基础上发展而来的。

数据库系统和文件系统的区别与联系

文件系统和数据库系统之间的区别:

(1) 文件系统用文件将数据长期保存在外存上,数据库系统用数据库统一存储数据;

(2) 文件系统中的程序和数据有一定的联系,数据库系统中的程序和数据分离;

(3) 文件系统用 *** 作系统中的存取方法对数据进行管理,数据库系统用DBMS统一管理和控制数据;

(4) 文件系统实现以文件为单位的数据共享,数据库系统实现以记录和字段为单位的数据共享。

文件系统和数据库系统之间的联系:

(1) 均为数据组织的管理技术;

(2) 均由数据管理软件管理数据,程序与数据之间用存取方法进行转换;

(3) 数据库系统是在文件系统的基础上发展而来的。

什么是Hadoop分布式文件系统

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。

Hadoop是Apache软件基金会所研发的开放源码并行运算编程工具和分散式档案系统,与MapReduce和Google档案系统的概念类似。

HDFS(Hadoop 分布式文件系统)是其中的一部分。

以上就是关于利用C#实现分布式数据库查询全部的内容,包括:利用C#实现分布式数据库查询、有哪些分布式数据库,实现最终一致性的(分布式数据库与集中式数据库的区别)、大数据的分布式数据库技术的对比(主流分布式数据库)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10061325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存