当前位置:首页 » 服务存储 » 冗余数据存储方案
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

冗余数据存储方案

发布时间: 2023-08-11 20:45:05

① OpenStack平台的数据库存储节点怎么做冗余

OpenStack其实有三个与存储相关的组件,这三个组件被人熟知的程度和组件本身出现时间的早晚是相符的,按熟悉程度排列如下:
Swift——提供对象存储 (Object Storage),在概念上类似于Amazon S3服务,不过swift具有很强的扩展性、冗余和持久性,也兼容S3 API
Glance——提供虚机镜像(Image)存储和管理,包括了很多与Amazon AMI catalog相似的功能。(Glance的后台数据从最初的实践来看是存放在Swift的)。
Cinder——提供块存储(Block Storage),类似于Amazon的EBS块存储服务,目前仅给虚机挂载使用。
(Amazon一直是OpenStack设计之初的假象对手和挑战对象,所以基本上关键的功能模块都有对应项目。除了上面提到的三个组件,对于AWS中的重要的EC2服务,OpenStack中是Nova来对应,并且保持和EC2 API的兼容性,有不同的方法可以实现)

② 数据库冗余怎么办

它将冗余数据选择到一个游标中,并根据(LastName,FirstName)来分组(在我们这个方案中),然后打开游标然后循环地取出每一行,然后用与先前的取出的键值进行比较,如果这是第一次取出这个值,或者这个值不是冗余键,那么跳过这个记录然后取下一个,不然的话,这就是这个组中的冗余记录,所以删掉它.

让我嫌宴樱们运行一下这个存储过程

BEGIN

DeleteDuplicates;

END;

/

SELECT LastName, FirstName, COUNT(*)

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1;

最后一个查询语句没有返回值,所以冗余数据没有了从表中取冗余数据的过程完全是由定义在csr_Duplicates 这个游标中的SQL语句来实现的,PL/SQl只是用来实现删除冗余数,那么能不能完全用SQL语句来实现呢?

二.SQL解决方案,使用RANK()删除冗余数据Oracle8i分析函数RANK()来枚举每一个组中的元素,在我们的方案中, 我们应用这个方案,我们使用这个函数祥铅动态的把冗余数据连续的排芹丛列起来加上编号,组由Partintion by 这个语句来分开,然后用Order by 进行分组SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) SeqNumber

FROM Customers

ORDER BY LastName, FirstName;

SQL

Listing 7. Output of single SQL statement that uses RANK()

显示的是根据记录的条数的个数来显示尤其对于冗余数据

ID LASTNAME FIRSTNAME SEQNUMBER

----- --------------- ---------- ----------

1018 Blake Becky 1

1013 Blue Don 1

1000 Bradley Tom 1

1002 Chang Jim 1

1008 Griffith David 1

1020 Hill Larry 1

1004 King Chuck 1

1005 Krieger Jeff 1

1012 Krieger Jeff 2

1017 Krieger Jeff 3

1003 Loney Julie 1

1007 Lord Don 1

1015 Mason Paul 1

1006 Monroe John 1

1009 Simon Michael 1

1010 Simon Michael 2

1001 Stone Tony 1

1011 Stone Tony 2

1014 Stone Tony 3

1016 Stone Tony 4

1019 Stone Tony 5

我们可以看一到,SeqNumber这一列中的数值,冗余数据是根据ID号由小到大进行的排序,所有的冗余数据的SqlNumber都大于一,所有的非冗余数据都等于一,所以我们取自己所需,删除那么没用的SELECT ID, LastName, FirstName

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM Customers)

WHERE SeqNumber > 1;

SQL

Listing 8. 冗余键的键值

有七行必须被删除

ID LASTNAME FIRSTNAME

----- --------------- ----------

1012 Krieger Jeff

1017 Krieger Jeff

1010 Simon Michael

1011 Stone Tony

1014 Stone Tony

1016 Stone Tony

1019 Stone Tony

7 rows selected.这显示有七行需要删除,还是用上一个表我测试了一下这个代码,它用了77秒种就删除了所有的数据准备好了用Sql语句来删除冗余数据,版本一它执行了135秒

DELETE

FROM CUSTOMERS

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM Customers)

WHERE SeqNumber > 1);

我们可以看到最后的两行语句对表中的数据进行了排序,这不是有效的,所以我们来优化一下最后一个查询语句,把Rank()函数应用到只含有冗余数据的组,而不是所有的列下面这个语句是比较有效率的,虽然它不像上一个查询那样精简SELECT ID, LastName, FirstName

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1;

选择冗余数据只用了26秒钟,这样就提高了67%的性能,这样就提高了将这个作为子查询的删除查询的效率,

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1);

现在只用了47秒钟的就完成的上面的任务,比起上一个136秒,这是一个很大的进步,相比之下,存储过程用了56秒,这样存储过程有些慢了使用PL/SQL语句我们和我们以上的代码,会得到更好的更精确的代码,和提高你代码的执行效率,虽然对于从数据库中枚举数据PL/SQL对于Sql两者没有什么差别,但是对于数据的比较上,PL/SQL就比SQL要快很多,但是如果冗余数据量比较小的话,我们尽量使用SQL而不使用PL/SQL如果你的数据表没有主键的话,那么你可以参考其它技术
Rank()其它的方法

使用Rank()函数你可以对选择你所保留的数据,(或者是小ID的或者是大ID 的,就由RECDate这个列来决定这种情况下,你可以把REcdate加入到(Orderby )子句中,倒序或者正序

这是一种保留最大Id的一种解决方案

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName, FirstName ORDER BY RecDate DESC, ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName, RecDate

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1);

这种技术保证了你可以控制每一个表中的保留的组,假设你有一个数据库,有一个促销或者有一个折扣信息,比如一个团体可以使用这种促销5次,或者个人可以使用这个折扣三次,为了指出要保留的组的个数,你可以在where 和having子句中进行设置,那么你将删除所有大于你

设置有数的冗余组

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 3)))

WHERE SeqNumber > 3);

As you can see, using the RANK() function allows you to eliminate plicates in a

single SQL statement and gives you more capabilities by extending the power of

your

queries.

正如你所见使用Rank()可以消除冗余数据而且能给你很大的可伸展性

③ 单个硬盘如何做冗余

1、首先,您要知道什么事冗余。冗余,指重复配置 系统的一些部件,当系统发生 故障时,冗余配置的部件介入并承担故障部件的工作,由此减少系统的故障时间。
2、常用冗余的分类:
a、电源:高端服务器产品中普遍采用双电源 系统,这两个电源是负载均衡的,在系统工作时它们都为系统提供电力,当一个电源出现故障时,另一个电源就承担所有的负载。
b、磁盘镜像:将相同的数据分别写入两个磁盘中。
c、RAID: 即磁盘阵列(Rendant array of inexpensive disks)的缩写。它由几个磁盘组成,通过一个控制器协调运动机制使单个数据流依次写入这几个磁盘中。常用的有RAID0、RAID1、RAID1+0、RAID3、RAID5;RAID3系统由5个磁盘构成,其中4 个 磁盘存储数据,1个磁盘存储校验信息。如果一个磁盘发生故障,可以在线更换故障盘,并通过另3个磁盘和校验盘重新创建新盘上的数据。RAID5将校验信息分布在5个磁盘上,这样可更换任一磁盘,其余与RAID3相同。
d、网卡:冗余网卡技术原为大型机及中型机上的技术,现在也逐渐被PC服务器所拥有,多用于网络系统的某个核心环节出现故障而造成整个网络系统崩溃。
3、综上所述,单个硬盘没有冗余功能。

④ 数据库服务器硬盘一定要有 冗余机制 冗余机制是干什么的

通过多重备份来增加系统的可靠性!

冗余系统配件主要有:

电源:高端服务器产品中普遍采用双电源系统,这两个电源是负载均衡的,即在系统工作时它们都为系统提供电力,当一个电源出现故障时,另一个电源就承担所有的负载。有些服务器系统实现了DC的冗余,另一些服务器产品如Micron公司的NetFRAME 9000实现了AC、DC的全冗余。
存储子系统:存储子系统是整个服务器系统中最容易发生故障的地方。以下几种方法可以实现该子系统的冗余。
磁盘镜像:将相同的数据分别写入两个磁盘中:
磁盘双联:为镜像磁盘增加了一个I/O控制器,就形成了磁盘双联,使总线争用情况得到改善;
RAID:廉价冗余磁盘阵列(Rendant array of inexpensive disks)的缩写。顾名思义,它由几个磁盘组成,通过一个控制器协调运动机制使单个数据流依次写入这几个磁盘中。RAID3系统由5个磁盘构成,其中4个磁盘存储数据,1个磁盘存储校验信息。如果一个磁盘发生故障,可以在线更换故障盘,并通过另3个磁盘和校验盘重新创建新盘上的数据。RAID5将校验信息分布在5个磁盘上,这样可更换任一磁盘,其余与RAID3相同。
I/O卡:对服务器来说,主要指网卡和硬盘控制卡的冗余。网卡冗余是在服务器中插上双网卡。冗余网卡技术原为大型机及中型机上的技术,现在也逐渐被PC服务器所拥有。PC服务器如Micron公司的NetFRAME9200最多实现4个网卡的冗余,这4个网卡各承担25%的网络流量。康柏公司的所有ProSignia/Proliant服务器都具有容错冗余双网卡。