union在数据表中的作用是什么?

union在数据表中的作用是什么?,第1张

union的作用是实现数据表之间的纵向联结。什么是表的纵向联结呢?也就是表与表之间的数据,在垂直方向上作并集展现,看起来像一张表中的数据。其与横向联结是相对的,横向联结是数据在水平方向上数据项并集展现,内联结可实现表之间的横向联结。

在实现数据表间的纵向联结时,必须注意如下几点:((1)所联结表的字段数必须一致。

(2)字段类型要一致,当不一致时,要考虑转化为同一类型。

用union.sql脚本初始化建表环境,创建出图服装表图食品表食品表、所示的两个表(服装表、食品表,order_id为两表的关联项)。

服装表

66037825960

食品表

66037831766

用下面的语句可实现两个表的横向联结,结果如图两表横向联结所示。

SELECT*FROMclothingc

Docker使用AUFS的CoW技术来实现image layer共享和减少磁盘空间占用。CoW意味着一旦某个文件只有很小的部分有改动,AUFS也需要复制整个文件。这种设计会对容器性能产生一定的影响,尤其是在待拷贝的文件很大,或者位于很多image layers的下方,或AUFS需要深度搜索目录结构树的时候。不过也不用过度担心,对于一个容器,每一个image layer最多只需要拷贝一次。后续的改动都会在第一次拷贝的container layer上进行。

启动一个Container的时候,Docker会为其创建一个read-only的init layer,用来存储与这个容器内环境相关的内容;Docker还会为其创建一个read-write的layer用来执行所有写 *** 作。

接下来我们仍然用实验来证明上面的结论。首先查询现有的容器数目为0,而且在/var/lib/docker/containers目录下也没有查到任何数据。最后,查看下系统的aufs mount情况,只有一个config文件。

启动一个changed-ubuntu的容器。

查看/var/lib/docker/aufs/diff目录发现,下面多了两个文件夹,6d45d64350c0317be5d2655072c6015f26447c84295630218813deeb90d103de就是Docker为容器创建的read-write layer,而6d45d64350c0317be5d2655072c6015f26447c84295630218813deeb90d103de-init则是Docker为容器创建的read-only的init layer。

/var/lib/docker/aufs/mnt目录的变化和/var/lib/docker/aufs/diff一致。

/var/lib/docker/aufs/layers/目录下多了与上文两个文件目录同名的文件,用cat命令可以清楚地看到其依赖layer的记录。

在/var/lib/docker/containers/目录下新建一个与containerid相同的文件夹,存放着容器的metadata和config文件。

接下来我们从系统aufs来看mount的情况,在/sys/fs/aufs/目录下多了一个si_48bad350b677de9文件夹。通过cat /sys/fs/aufs/si_fe6d5733e85e4904/*命令我们可以清楚地看到这就是我们刚刚起的容器的layer权限,只有最上面的6d45d64350c0317be5d2655072c6015f26447c84295630218813deeb90d103de layer是read-write权限。

最后提下AUFS如何为Container删除一个文件。如果要删除file1,AUFS会在container的read-write层生成一个.wh.file1的文件来隐藏所有read-only层的file1文件。至此,我们已清楚地描述和验证了Docker是如何使用AUFS来管理container layers的。

iscsi是由scsi协议发展而来,简单来讲,iscsi是对scsi的封装,并通过以太网来进行scsi指令的传输. 传统的scsi存储设备,通过总线连接到主机,供主机使用. 通过iscsi,主机可以直接通过以太网(TCP/IP)连接使用scsi存储设备,这也是通常所说的NAS存储的一种,它提供的是块级存储服务.

通过iscsi连接的存储设备,由于中间经过了交换机等网络设备,从主机到同一个存储设备,可能会存在多条路径. 每条路径在linux系统上都会被识别成一个设备,如果把每条路径都当成独立设备去处理的话,不同路径之间的读写 *** 作就可能会造成数据的紊乱.

multipathd可以解决上述的多路径问题,其主要原理包括:

a. 每一个scsi设备都有唯一的scsi_id,multipathd通过探测scsi_id来判断不同路径后面是不是同一个存储设备.

b. 通过内核device-mapper功能,将多条路径映射为单一的块设备,提供给文件系统使用.

c. 由于多路径的存在,multipathd可以提供负载均衡和高可用的服务.

整个环境通过两台虚拟机搭建,一台虚拟机作为iscsi存储服务器,另一台作为客户端. 两台虚拟机都配置了两张网卡,从客户端到iscsi服务器,可以形成两条路径.

通过openfiler搭建iscsi存储服务器,openfiler镜像包及部署手册,具体参考openfiler官网.

https://www.openfiler.com/community/download

部署完成后,创建了2个iscsi target:

需要安装如下软件包:

iscsi-initiator-utils:提供iscsid服务,及iscsi管理工具iscsiadm

device-mapper-multipath&device-mapper-multipath-libs:提供multipathd服务及multipath管理工具

通过iscsiadm命令探测openfiler服务器上的iscsi target,具体如下:

可以看到,openfiler返回了2个target,每个target 2条路径. 执行命令后,在/var/lib/iscsi/目录生成了如下文件:

对iscsi target执行login *** 作后,系统才能识别到设备并使用,login命令如下:

执行login命令后,识别到了sda、sdb、sdc、sdd 4个设备,查看它们的scsi_id;可以看到sda、sdc是同一设备的不同路径,sdb、sdd是同一设备的不同路径.

启动multipathd服务后,multipathd会自动识别多路径,并自动在/dev/mapper/目录下创建多路径映射后的设备.

查看multipathd工作模式,命令multipath -ll

从上面输出可以看到,multipathd默认的策略是两条路径一主一备.

使用dd往/dev/mapper/mpathb中写入数据,数据从sda写入,sdc处于备用状态

将sda网络断开,过几秒后,切换到sdc写数据

再查看sda、sdc主备情况如下:

修改multipathd path_grouping_policy、path_selector(路径选择策略),在/etc/multipath.conf配置文件中,加入如下配置修改mpathb的工作模式.

重启multipathd服务后,查看multipathd工作模式,可以看到sda sdc都处于active状态:

dd测试mpathb写入数据时的情况如下,sda sdc轮询写入,所以吞吐量一样:


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

原文地址: http://outofmemory.cn/yw/8888855.html

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

发表评论

登录后才能评论

评论列表(0条)

保存