首页 理论教育只读应用分布透明性分析的实证研究

只读应用分布透明性分析的实证研究

【摘要】:所谓只读应用,是数据库中使用最广泛的应用。以“$”开头的字串是一个变量,表示这是一个参数变量,主要用于值的交换,说明数据库与应用程序之间的数据交换。

所谓只读(read only)应用,是数据库中使用最广泛的应用。这类应用的特点是,用户的目的是查询信息而不是修改信息(以下部分样例和表述选自参考文献[3])。

为了方便,我们先扩充SQL语言,并以伪代码的形式来展示。

下面是一些我们会用到的记号。

以“#”开头的字串是一个变量,表示查询处理返回的状态值,例如,#FOUND表示查询结果为“真”。

以“$”开头的字串是一个变量,表示这是一个参数变量,主要用于值的交换,说明数据库与应用程序之间的数据交换。

下面是一个简单的例子,其含义是从一个关系Student中按照指定的学号查询出相应的学生姓名:

Select name into$NAME

f rom Student

where sno=$SNO

这个查询很简单。其中:$SNO是一个参数变量,用于从应用程序中将“学生”的姓名值传递给数据库;$NAME也是一个参数变量,用于从数据库中将学生的姓名值传递给应用程序。这类查询可以称为参数查询。

1.分片透明性(level 1)

我们把第一个层面的透明性称为分片透明性,意思是此时并不需要知道数据是否分片。样例如下:

Input(terminal,$SNO);

Selec t name into $NAME

f rom Student where sno=$SNO;

Out put(termina l,$NAME).

以上样例中,我们用Input()函数表示输入,Output()函数表示输出,这两个函数中出现的变量terminal表示为终端。这里的输入终端代表键盘,输出终端代表显示器

这个伪程序的含义为:按照终端输入的学号(记录于变量$SNO上)查询该学生的姓名,把结果显示在终端上。

2.地点透明性(level 2)

第二个层面的透明性我们称为地点透明性,表示不需要知道数据存放的地点,样例如下:

Input(terminal,$SNO);

Selec t name into $NAME(www.chuimin.cn)

f rom Student1

where sno=$SNO;

i f not #FOUND then

Select name into $NAME

f rom Student2

where sno=$SNO;

Output(terminal,$NAME).

以上样例的含义是:按终端输入的学号在数据片Student1上查询该学生的姓名,查询到后将结果记录于变量$NAME上,如果没有查询到(#FOUND为假),则查询Student2,查询到后将结果记录于变量$NAME上。最后将结果输出到终端上。

3.本地映射透明性(level 3)

第三个层面的透明性我们称为本地映射透明性,表示不需要知道数据本地的映射机制,但是需指明运算实施的地点,如节点1(SITE 1),记作@SITE 1。假设这两个数据片分别驻留在节点1(SITE 1)和节点3(SITE 3),结果如下:

Input(terminal,$SNO)

Se l ec t name into $NAME

f rom Student1@SITE 1

where sno=$SNO;

i f not #FOUND then

Select name into $NAME

f rom Student2@SITE 3

where sno=$SNO,

Output(terminal,$NAME).

这个程序中,首先在节点1上查询Student1,没查询到的话,就在节点3上查询Student2