分布式数据库系统

随着业务量的发展,数据库系统有集中式走向分布式是必然选择。

1 在介绍分布式系统是先来做一下概念说明

我们自在看分布式数据库的相关知识的时候,常常会看到集群,分布式集群,分布式系统等,其实集群与分布式是有区别的:

(1)集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:可扩展性和高可用性。

(2)分布式:所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

(3)由此可见:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。(具体看博客 

集群与分布式的区别

(4)但是就数据库其实也可以理解成一样,目的都是为了实现数据库的负载均衡,高可用性。他们之间的不同要看怎么设计了,分布式一般是各分布节点根据哈希算法或其他算法分散存储数据,意思就是所有节点的数据加起来才算是整体数据。从应用端传过来的请求只操作涉及到的某个节点或部分节点就可完成一次请求。

    数据库集群很多设计的都是所有节点服务器之间的数据是完全同步的。当一个应用发出请求,首先发给负载服务器,根据应用系统提供的负载均衡算法或是数据库本身的负载均衡算法,选择一个负载最小节点来执行请求并返回数据,同时集群中还有一个同步服务器来保证各节点中的数据一致。

总结:可以理解成一样,而且分布式与集群设计的时候也可以一起用,因此我们也接收模糊概念,具体情况具体分析。

2 企业数据库发展的路线:

大部分企业数据库开始是单服务器模式,之后业务量变大会升级硬件提升处理能力,之后会搭建master-slave主从复制结构(读写分离),之后是建立分布式系统,实现水平或垂直切分。

3 分布式数据库发展概述:

   20世纪90年代以来,分布式数据库系统进入商品化应用阶段,传统的关系数据库产品均发展成以计算机网络及多任务操作系统为核心的分布式数据库产品,同时分布式数据库逐步向客户机/服务器模式发展。

(1)DDBS的分类:同构同质型DDBS、同构异质型DDBS、异构型DDBS。

同构同质型DDBS:各个场地都采用同一类型的数据模型(譬如都是关系型),并且是同一型号的DBMS。

同构异质型DDBS:各个场地采用同一类型的数据模型,但是DBMS的型号不同,譬如DB2、ORACLE、SYBASE、SQL Server等。

异构型DDBS:各个场地的数据模型的型号不同,甚至类型也不同。随着计算机网络技术的发展,异种机联网问题已经得到较好的解决,此时依靠异构型DDBS就能存取全网中各种异构局部库中的数据。

(2)数据分片类型:水平分片、垂直分片、导出分片、混合分片。

水平分片:按一定的条件把全局关系的所有元组划分成若干不相交的子集,每个子集为关系的一个片段。

垂直分片:把一个全局关系的属性集分成若干子集,并在这些子集上作投影运算,每个投影称为垂直分片。

导出分片:又称为导出水平分片,即水平分片的条件不是本关系属性的条件,而是其他关系属性的条件。

混合分片:以上三种方法的混合。可以先水平分片再垂直分片,或先垂直分片再水平分片,或其他形式,但他们的结果是不相同的。

4分布式数据库管理系统架构

分布式数据库概述

接受用户请求,并判定把它送到哪里,或必须访问哪些计算机才能满足该要求。访问网络数据字典,了解如何请求和使用其中的信息。如果目标数据存储于系统的多个计算机上,就必须进行分布式处理。通信接口功能。在用户、局部DBMS和其他计算机的DBMS之间进行协调。在一个异构型分布式处理环境中,还需提供数据和进程移植的支持。这里的异构型是指各个场地的硬件、软件之间存在着差别。

分布式数据库概述

关于分布式数据库理论方面的知识可以看博客从分布式数据库结构入手讲解其前世今生分布式数据库概述

4 分布式数据库系统的实现技术

   现在大部分的数据库都支持分布式技术,对于分布式数据库的实现数据库厂商与用户都做了大量的研究。厂商推出的集群解决方案主要有:SQLSERVER Cluster、OracleRAC、MySQLCluster等,如果采用厂商的解决方案,会对厂商的技术产生依赖。现在用户大都基于开源项目自己实现一个分布式系统,特别是互联网公司基本都是基于mysql实现分布式数据库系统。自己实现分布式系统的话很多都是基于中间件技术,中间件技术要根据数据库系统具体选择或者实现一个,比如,应用于mysql的amoeba中间件。

(1)厂商解决方案:

对于厂商解决方案大都是厂商根据自己公司数据库的特点提出的方法:

SQL SERVER的集群模式



这种结构只能说是一种故障转移的机制,当有一个节点出现问题后把负载转移到另一个节点上。在负载能力上和扩展性上没有任何办法,而且还浪费了硬件资源
Oracle Real Application Clusters (RAC)



    Oracle Rac最多可支持64个节点,基本上算是解决了性能,扩展性的问题了,但是它在存储上还是一个单点,且不说出现故障怎么办,IO也可能会成为性能瓶颈。 我们都知道一个数据库大到一定程度的时候,在物理上分区才能从根本上解决问题,对几十万数据进行查找和几百万上千万的数据进行查找在系统的消耗上以及响应时间上有着几何级的降低。

MySQLCluster

MySQL cluster和Oracle RAC完全不同,它采用Shared-nothing架构。整个集群由管理节点(ndb_mgmd),处理节点(mysqld)和存储节点(ndbd)组 成,不存在一个共享的存储设备。MySQLcluster主要利用了NDB存储引擎来实现,NDB存储引擎是一个内存式存储引擎,要求数据必须全部加载到内存之中。数据被自动分布在集群中的不同存储节点上,每个存储节点只保存完整数据的一个分片(fragment)。同时,用户可以设置同一份数据保存在多个不同的存储节点上,以保证单点故障不会造成数据丢失。

虽然MySQLcluster目前性能还不理想,但是share nothing的架构一定是未来的趋势,Oracle接手MySQL之后,也在大力发展MySQL cluster,我对MySQL cluster的前景抱有很大的期待。

(2)自己实现分布式数据库系统:

   对于自己实现一个分布式数据库系统以构建一个高可用的数据系统,提高数据库的读写能力,现在常用的方法是数据分片与读写分离。基于中间件实现的分布式系统结构如下:


Cluster Killer中间件


[img] 

从图例中可以看出,下面的像网格一样的机器叫数据层,每个机器上存储着数据全集的一个分区,每一行组成一个数据全集,每一列是某个分区的多份相同的数据从而达到查询时负载均衡的效果,同时也是高可用性的保障:某个列的机器出现问题后其他的机器会负载访问。为了不让这样一个复杂的结构暴露给应用程序,在数据层上面又放了一层机器叫中间层,中间层机器的数据库中驻留着的中间件来处理SQL语句,根据SQL语句的类型和条件来决定由哪些机器来提供服务。在中间层的外面加一个负载均衡设备, 这样应用程序或者开发/维护的人员通过负载均衡设备连接到中间层的任意一台机器上操作,感觉就像还在使用原来的一个数据库那样,易用性非常好。

Amoebafor MySQL

Amoeba for MySQL 位于Client、Database Server(s)之间,具有负载均衡、高可用性、sql过滤、可承受高并发、读写分离、Query Route(解析sql query语句,并且根据条件与预先设定的规则,请求到指定的目标数据库。可并发请求多台数据库合并结果)、对客户端透明,能降低数据切分带来的复杂多数据库结构、数据切分规则给应用带来的影响。

对于更具体的能容要看转载的博客:

可拓展的分布式系统:http://blog.youkuaiyun.com/u010282707/article/details/37580243

大型分布式系统应用案例:http://blog.youkuaiyun.com/u010282707/article/details/37580403

amoeba for mysql 分布式数据库Proxy解决方案:http://blog.youkuaiyun.com/u010282707/article/details/37580693

浅谈mysql集群:http://blog.youkuaiyun.com/u010282707/article/details/37580593

<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值