four bytes ANSI floating point type
eight bytes ANSI double precision floating point type
char const*
zero terminated string
dbReference<T>
reference to class T
dbArray<T>
dynamic array of elements of type T
除了上表定义的数据类型外,fastdb记录还可以包括这些元组的嵌套结构。fastdb不支持无符号数据类型以简化查询语言,清除由于符号数/无符号数比较产生的错误,减少引擎的大小。
.net framework 4提供了新的线程安全和扩展的并发集合,它们能够解决潜在的死锁问题和竞争条件问题,因此在很多复杂的情形下它们能够使得并行代码更容易编写,这些集合尽可能减少使用锁的次数,从而使得在大部分情形下能够优化为最佳性能,不会产生不必要的同步开销。字段值,中,文档数组,数组元素,返回数组,类似于,满足指定,db,文档,name,字段,users,favorites,status,points,true,一,mongodb操作文档、集合、、shell mongodb操作文档、集合、、shell mongodb操作文档、集合、、shell,mongodb,操作,文档,集合,,shell mongodb操作文档、集合、、shell,mongodb,操作,文档,集合,,shell,返回 _id 字段、name 字段、 status 字段以及 favorites 文档中的 food 字段,db。客户提出一个需求,是要做类似于统计的功能,用到的框架式ssh2,在一个查询界面我会列出people对象的所有字段,让用户去选择他关心的字段,是多选文本框,用户选择了以后,并输入查询条件,我会提交一个name="name_姓名"类似于这样的name提交action来处理,用"-"分割来获得到name 和 姓名 姓名用于显示列表的标题,name是要查的people的属性,这样就会有两个集合对象,第一个是peoplelist集合,另外一个是用户选择的属性的集合propertylist,在页面的时候试了很多种方法,不知道该怎么来显示。
每一个要在中使用的c++类或者结构,,都包含一个特别的方法来描述其字段。宏TYPE_DESCRIPTOR(field_list)构成了这个方法。这个宏的用括号括起来的单一参数是一个类字段描述符的列表。如果要为这个类定义一些方法并使之可以用于对应的,则用宏CLASS_DESCRIPTOR(name, field_list)来代替TYPE_DESCRIPTOR。需要类名来取得成员函数的引用。
下面的宏可以用来构造字段描述符。
FIELD(name)
指定名字的非索引字段
KEY(name,index_type)
索引字段。index_type必须是HASHED和INDEXED标志的组合。当指定HASHED标志的时候,fastdb将为是用这个字段作为关键字的表创建一个hash表。当指定INDEXED标志时,fastdb将创建为使用这个字段作为关键字的表创建一个T_tree(一种特殊的索引).
UDT(name,index_type, comparator)
用户自定义原始二进制类型。把这种类型作为指定大小的字节序列处理。这个字段可以用来查询(比较下同一类型的查询参数),可以通过order子句来索引和使用。通过程序员提供的comparator函数来进行比较操作。比较函数接受3个参数:两个指向待比较的原始二进制对象的指针及其大小。index_type的语义与KEY宏中的一致。
RAWKEY(name,index)
带有预定义比较算子的原始二进制类型。这个宏只是一个把memcmp作为比较算子的UDT宏的特例。
RAWFIELD(name)
另一个UDT宏的特例,使用memcmp作为预定义比较算子,并且没有索引。
SUPERCLASS(name)
指定当前类的基类(父亲)的信息。
RELATION(reference,inverse_reference)
指定类(表)之间的、一对多或者多对多的关系。reference和inverse_reference字段都必须是引用或者引用数组类型。inverse_reference字段是一个包含了指向当前表的逆引用的引用表。逆引用自动由fastdb更新并用于查询优化。
OWNER(reference,inverse_reference)
指定类之间的、一对多或者多对多的owner-member关系。当owner记录被删除时所有引用的member记录也会被删除(层叠式删除)。如果member记录要引用owner就必须通过RELATION宏声明。
METHOD(name)
为类指定一个方法。该方法必须是无参的实例成员函数,返回bool值、数值、引用或者字符串类型。方法必须在类的所有属性之后指定。
尽管只有原子字段可以被索引,但可以为一个结构指定一个索引类型。只有当该索引类型在该结构的索引mask中指定时才会为该结构的成员创建。这就允许程序员可以根据该结构在记录中的角色来设置或者取消索引。
下面的例子说明了头文件中类型描述符的创建过程:
classdbDateTime {
int4stamp;
public:
intyear() {
return local.tm_year。if ascb(midb(stamp,i+1,1))=gif(i) then return=true else return=false。if ascb(midb(stamp,i+1,1))=bmp(i) then return=true else return=false。
}
...
CLASS_DESCRIPTOR(dbDateTime,
(KEY(stamp,INDEXED|HASHED),
METHOD(year), METHOD(month), METHOD(day),
METHOD(dayOfYear), METHOD(dayOfWeek),
METHOD(hour), METHOD(minute), METHOD(second)));
};
classDetail {
public:
char const* name;
char const* material;
char const* color;
real4 weight;
dbArray< dbReference<Contract> > contracts;
TYPE_DESCRIPTOR((KEY(name, INDEXED|HASHED),
KEY(material, HASHED),
KEY(color, HASHED),
KEY(weight, INDEXED),
RELATION(contracts, detail)));
};
classContract {
public:
dbDateTimedelivery;
int4quantity;
int8price;

dbReference<Detail> detail;
dbReference<Supplier> supplier;
TYPE_DESCRIPTOR((KEY(delivery, HASHED|INDEXED),
KEY(quantity, INDEXED),
KEY(price, INDEXED),
RELATION(detail, contracts),
RELATION(supplier, contracts)));
};
所有中使用的类都要定义类型描述符。除了定义类型描述符外,还必须在C++类和表之间建立一个映像。宏REGISTER(name)就做这个工作。与TYPE_DESCRIPTOR宏不同的是,REGISTER宏应该在实现文件中使用而不是在头文件中。该宏构造一个与类相连的表的描述符。如果你要在一个应用中使用多个,那么就可能使用REGISTER_IN(name,database)宏在一个具体中注册一个表。该宏的database参数应该是一个指向dbDatabase对象的指针。你可以像下面这样注册的表:
REGISTER(Detail);
REGISTER(Supplier);
REGISTER(Contract);
表(以及对应的类)在每一时刻只能对应于一个。当你打开一个,fastdb向中导入所有在应用中定义的类。如果一个同名的类在中已经存在,则会比较描述符在中的类与描述符在应用中的类,如果两个类的定义不同,则fastdb试图将该表转换成新的格式。数值类型之间的任何转换(整形到实型,实型到整形,扩展或者截断)都是允许的。增加字段也很容易,但是只有对空表才可以删除字段(以避免偶然的数据崩溃).
装载所有的类描述符后,fastdb就检查在应用程序的类描述符中指定的索引是否存在于中、创建新的索引并且删除不再使用的索引。只有在不超过一个应用程序访问是才可以进行表的重构以及增加/删除索引。所以只有第一个与关联的应用程序可以进行表的转换,所有其余的应用只能向中增加新类。
空间设计如表2-2所示: 表2-2空间数据 小班矢量文件字段设置 表2-3 :万方数据 2研究区概况与建立 表2-3小班字段设置 等高线矢量数据字段设置 表2.4 : 表2_4等高线字段设置 2.3.2属性 单木健康指标数据 excel格式 。4.在数据环境中设置关系:如果加入数据环境的表具有在中设置的关系,则这些关系自动带入数据环境中.如果表之间没有关系,则可在数据环境中进行设置表之间的临时关系.若要在数据环境中设置临时关系,可从主表中拖动字段到相关表中相匹配的索引标识.在数据环境中设置了一个临时关系后,会在表之间出现一条连线来指示这个关系.例如,我们在数据环境中拖动"工资情况"表的"编号"字段到"职工档案"表的"bh1"索引标识上,即在这两个表之间建立了一个临时关系,如图7。消息id(必要,kingbase 、oracle等新增可使用序列: sms_seq_messageid,sqlserver、mysql等可使用自增字段)此值对应于成功或失败表中的sid字段中的值oracle、kingbase系统脚本自动包含了序列sms_seq_messageid的创建脚本 发送用户(不是必要) 接收手机号码(必要) 短信内容(必要)。
从版本2.30开始,fastdb支持自增字段(有数据自动赋值的值唯一的字段).要使用自增字段必须:
1.带上-DAUTOINCREMENT_SUPPROT标志重新编译fastdb和你的应用程序。(在fastdb makefile中的DEFS变量中增加这个标志)
注意:不带该标记编译的fastdb创建的文件与带标记编译的fastdb创建的文件不兼容。
2.如果你要使用初始值非0的计数器,则必须给dbTableDescriptor::initialAutoincrementCount赋个值。该变量由所有的表共享,因此所有的表都有一个共同初始值的自增计数器。
3.自增字段必须是int4类型,并且必须用AUTOINCREMENT标志声明
class Record {
int4 rid;
char const* name;
...
create table if not exists t_student(id integer primary key autoincrement, name text unique, age integer)。create table if not exists t_student(id integer primary key autoincrement, name text, age integer default 1)。create table if not exists t_student (id integer primary key autoincrement, name text,age integer,score real)。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-106153-4.html
会有进步
敢于消灭一切来犯之敌