- 主题:如何写一个函数能够序列化任意结构
目前已经实现Oracle,DB2,MYSQL的映像。
也可以用数据库的表结构自动生成模板。从而动态访问数据库。
【 在 ylh0315 的大作中提到: 】
: 虽然写模板费一些精力,但是可以用于序列化和反序列化,以及各种数据格式转换。甚至可以进行SRM(Structure Relation Mapping)关系数据库映像,把关系表映射成结构。
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
不仅是serialize,还有SRM和ORM呢。可以理解为扩展的serialize。把结构数据序列化到数据库。
protobuf也是,能够序列化 不能ORM。
使用特定的对象,不能使用已有的对象,就如第三方软件里的结构。
【 在 RunningOn 的大作中提到: 】
: 感觉你要的是 boost::serialize
: C/C++里做序列化绕不开的是你需要知道结构体的定义,如果是这样的话,其实不会比
: boost::serialize 功能更全,最多做到更易用。
: ...................
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
模板就是描述了结构体的定义。
【 在 RunningOn 的大作中提到: 】
: 感觉你要的是 boost::serialize
: C/C++里做序列化绕不开的是你需要知道结构体的定义,如果是这样的话,其实不会比
: boost::serialize 功能更全,最多做到更易用。
: ...................
--
FROM 221.221.50.*
不需要预处理,模板需要预先构建。
可以手动构建,半自动构建,全自动构建。
【 在 littleSram 的大作中提到: 】
: 明白,hgoldfish一说,我就明白你实现的方法了
: 预处理一下,挺好的。
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
要结构,也要模板,缺一不可。
一个项目,几十个表,大的表150多字段,用手写结构和模板太困难了,还容易错。
我们都是全自动建立结构和模板。
一个结构文件,被.h include。
一个模板文件,被.c include。
数据结构改变时,重新生成即可。
【 在 RunningOn 的大作中提到: 】
: point就是你必须得知道结构体的定义啊。你如果能做到不需要知道定义,那就nb。
: 硬要说的话,用模板描述还不如用struct描述更方便呢。
: 就你说的这个问题而言,序列化、反序列化是核心,写数据库还是存文件这个是比较tr
: ...................
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
不是。
是分析数据库的数据字典来建立结构和模板。
【 在 RunningOn 的大作中提到: 】
: 如果说是通过程序来分析.h/.cpp文件来自动建立结构,那问题就简单一些了。
: python里有个pycparser工具,就能分析C的代码结构了。
: python还有个CppHeaderParser,听名字就知道是专门用来解析c++头文件的,解析的结果很
: ...................
--
FROM 221.221.50.*
如果不是数据库,可以写一个元数据文件,同时生成结构和模板。
如果说第三方软件提供的现成结构,只好自己写模板。
你说的是个好办法,可以考虑分析结构定义自动生成模板。
【 在 RunningOn 的大作中提到: 】
: 如果说是通过程序来分析.h/.cpp文件来自动建立结构,那问题就简单一些了。
: python里有个pycparser工具,就能分析C的代码结构了。
: python还有个CppHeaderParser,听名字就知道是专门用来解析c++头文件的,解析的结果很
: ...................
--
FROM 221.221.50.*
0长度数组我也经常用,模板系统也需要这个技术。
成组访问数据库,就是批量操作,就需要结构数组。其大小不定。
处理方法是,从模板取出结构总长度,乘以记录数,按这个分配空间,进行批量操作。
可以进行的操作:
select,insert,update,delete。
操作时需要批量绑定变量,绑定变量就在这个数组的区域内。
这种批量操作,不使用结构数组是非常困难的。
比如1000个记录的150个字段的数组,只需绑定150次。如果使用离散变量,需绑定150000次,就如JAVA批量访问数据库就是这样。所以C,C++用模板批量访问数据库,效率要比JAVA高很多。
【 在 jjfz 的大作中提到: 】
: 看风格了,我这里写的底层DB喜欢用0长度数组,使用时再决定长度
: 还喜欢隐藏类成员,对外ClassA仅有接口,对内ClassAImp才有数据
: 外面不可见Imp,只能使用接口
: ...................
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
每一个表或者SQL语句都需要单独的程序处理。
我这个,有时需要共性处理,比如去除重复数据的程序,有6个表需要这个操作,一般情况就是6个程序(随着业务发展可能还会增加表。这些表的结构不尽相同)。
我这里就是一个程序,6个表,把各自的数据和模板带来就行了,处理是一样的。
就如同这贴标题,处理序列化这个功能,一个程序就够了,各自的结构各自带模板来,处理是一样的。见23楼。
所以模板的意义在于程序的通用性。所有需要通用处理结构的问题,都可以由模板来解决。
否则,你有100个结构要处理,就得写100个程序。有N种处理,就得写100N个程序。
【 在 jjfz 的大作中提到: 】
: 看风格了,我这里写的底层DB喜欢用0长度数组,使用时再决定长度
: 还喜欢隐藏类成员,对外ClassA仅有接口,对内ClassAImp才有数据
: 外面不可见Imp,只能使用接口
: ...................
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
如果一个结构就有1T大,那确实处理不了,得想办法改变设计。
现在最好一个结构不超过2G,还是可以想想办法处理的。
【 在 allegro 的大作中提到: 】
: 序列化,反序列化有没有人实现过这这个功能:
: 对于struct A,序列化后会生成一个极其长的byte stream,比如1TBytes大小。
: 然后把这个1T写入存储。
: ...................
--
FROM 221.221.50.*