集群文件

阅读(2052) 标签: 集群文件,

集群服务器启动后,可以提供远程文件服务或者远程游标服务,在程序中可以访问集群服务器上的文件数据。

访问集群文件

在上一节中,我们了解了如何启动集群服务器,服务器启动后,可以访问集群服务器上的文件。

集群服务器上的文件,使用起来和本地文件是相同的,如:

 

A

1

192.168.1.112:8281

2

PersonnelInfo_n1.txt

3

=file(A2,A1)

4

=A3.import@t()

5

=A4.derive().run(if(Gender=="M", Gender="Male"))

6

>A3.export@t(A5)

7

=A3.import@t()

在执行网格代码前,需要在启动的集群服务器的主路径D:\files\node1下放置所需文件PersonnelInfo_n1.txt,这个文件可以直接复制前面使用的PersonnelInfo.txt后重命名。另外,如果在本地使用,需要注意本地集算器的主路径不要和集群服务器相同,如本地集算器主路径如下:

代码执行后,A4中结果如下:

和本地文件类似,使用函数file(fn,h),从服务器列表h中读取组表文件fn,打开集群文件。同样与本地文件类似,集群文件可以存储在分机的主路径下,也可以存储在分机的寻址路径下。如果文件需要使用特殊的编码字符集,可以使用file(fn:cs,h),用字符集参数cs指定。使用集群文件时,集算器的后台会有相应的信息,这些信息并不会出现在集群服务器的信息窗口中:

A5中将表中数据复制后,把男员工的性别改为Male,并在A6中输出到集群文件。执行后,在A7中查询到结果如下:

集群文件在指定特定分机时,会明确访问分机中的文件,文件既可读也可写。

 

使用集群文件时,还可以指定多个分机。如果需要在一台计算机中使用多个分机,需要先在集群服务器的Config中配置多个分机:

如再运行一个新的集群服务器,将会在列表中选取未启动的分机ip和端口使用。为了区分不同分机的使用,在这里先将主路径设置为D:\files\node2后再启动第2个集群服务器:

此时,第二个集群服务器的主路径下并没有文件,此时指定分机列表来使用集群文件如下:

 

A

1

[192.168.1.112:8281,192.168.1.112:8282]

2

PersonnelInfo_n1.txt

3

=file(A2,A1)

4

=A3.import@t()

5

=A3.cursor@t()

6

>A5.skip(90000)

7

=A5.fetch@x(5)

指定多个服务器,使用函数file(fn,hs),只需指定分机列表hs即可。使用后A4中同样可以正常返回结果,得到的数据和前面的例子中A7的结果是相同的。分机列表使用集群文件时,只要其中某一台分机的主路径中存在指定名称的文件即可正常使用。

集群文件也可以作为游标使用,如在A5中生成游标,在A7中读取第9000190005条数据如下。

指定分机列表使用集群文件时,如果同名的文件在本地集算器的主路径下也有,那么会优先使用本地文件。由于这种情况下,集群文件不一定来自于哪一个分机,或者也可能来自于本地,因此此时的集群文件只能读取而不能写入。

集群文件的维护

各个分机中的文件,并不需要分别去对它们的主路径或者寻址路径中操作,而是可以通过函数处理。如:

 

A

B

1

192.168.1.112:8281

192.168.1.112:8282

2

PersonnelInfo.txt

 

3

PersonnelInfo_n1.txt

PersonnelInfo_n2.txt

4

=movefile@c(A2;"/",B1)

=movefile(A3,A1;"/",B1)

5

=movefile(A2,B1;B3)

=movefile@c(A2;"/",[A1:B1])

6

=movefile(A2;,[A1:B1])

=movefile@c(A3,B1;"/",A1)

7

=movefile(A3,A1;"/",B1)

 

这里使用了一台计算机中启动的两个分机,分机A192.168.1.112:8281,主路径为D:/files/node1;分机B192.168.1.112:8282,主路径为D:/files/node2。在初始情况下,两个分机各自的主目录中文件如下:

 

分步执行上面的代码,A4使用movefile@c(fn; p, hs) 函数,将本地文件fn复制到集群服务器hs中的目录p内,其中选项表示执行复制操作。这里其实只指定了单一分机B,函数中使用表示复制到分机的主路径中。执行后,两个分机主路径中文件如下:

 

分机B的主路径中上传了文件,在集群服务器窗口中会输出操作信息:

B4中使用movefile(fn, h; p, hs) 函数,将集群服务器h中的文件fn移动到集群服务器h中的路径p内。这里将文件PersonnelInfo_n1.txt从分机A移动到分机B的主路径中,因为没有使用选项,原文件移动后会消失。执行后D:/files/node1目录为空,D:/files/node2目录下文件如下:

 

分机A和分机B的窗口中输出操作信息如下:

 

A5中使用movefile(fn, h; p, hs) 函数时,未指定目标分机参数hs,此时将把文件fn的名称改为p,实际上在这情况下,p不再表示目标路径,而是表示新文件名。执行后D:/files/node1目录仍然为空,D:/files/node2目录下文件如下:

 

B5中和A4类似,仍然是复制本地文件PersonnelInfo.txt,只不过是指定目标分机时使用了多个分机构成的序列,此时文件将复制到多个分机中。执行后,两个分机主路径下文件如下:

 

文件被复制时,集群服务器中输出信息如下,两个分机中信息是相同的:

 

A5中使用movefile(fn, h; p, hs) 函数时,未指定目标路径参数p,此时会执行删除操作。执行两个分机主路径中结果如下:

 

这里A5指定了目标分机参数hs,将在各个分机中删除文件,而此时不应再指定源文件分机h了,执行时也不会删除本地的文件。如果在删除文件时指定了h而没指定目标分机参数hs,则只会删除指定分机中的文件。

文件被删除时,两个分机中也会输出对应的操作信息,信息是相同的:

B6中,将分机B上的文件PersonnelInfo_n1.txt复制到A中,复制后,两个分机的主路径中文件如下:

 

此时,在A7中尝试将分机A上的文件PersonnelInfo_n1.txt移动到分机B中时,会出现错误信息:

 

这是因为目标目录中已经存在同名的文件,此时如果添加@y选项使用movefile@y()函数,可以在移动或复制文件时强制覆盖目标路径中的同名文件,避免产生错误中断。