当前位置: 首页 > 工具软件 > FastDB > 使用案例 >

fastdb相关备忘

容宏逸
2023-12-01

选择fastdb主要有两个原因, 
1.内存数据库,体量小,速度快 
2.其数据结构与交易系统非常类似(很大可能性是交易系统fld那套东西借鉴了fastdb,猜的:)

部署&安装

  • 下载 
    http://www.garret.ru/fastdb.html
ok@x1:~/下载$ ll fastdb-3.76.tar.gz
-rw-rw-r-- 1 ok ok 3287628 7月 10 10:29 fastdb-3.76.tar.gz
  • 编译安装
  1. ok@x1:~/下载$ ll fastdb-3.76.tar.gz
  2. -rw-rw-r-- 1 ok ok 3287628 7月 10 10:29 fastdb-3.76.tar.gz
  3. ok@x1:~/workspace/fastdb$ ./configure
  4. ok@x1:~/workspace/fastdb$ make
  5. ok@x1:~/workspace/fastdb$ sudo make install

修改源码

  • 宏冲突 
    TYPE_DESCRIPTOR,fastdb也使用了这个宏,或者说交易系统也用了这个宏,连名字都不改一下。。。 
    纠结了一下,是该交易系统的代码呢还是还fastd的呢? 
    当然,哪个好改改哪个,fastdb走起。 
    有一处定义,和20几处的使用,当然不能手动改了,脚步继续走起:
  1. find -name "*.h" | xargs sed -i 's/TYPE_DESCRIPTOR/FAST_TYPE_DESCRIPTOR/g'

 

FAST_TYPE_DESCRIPTOR是目标

  • config.h
 
  1. frank@frank-ThinkPad-13:~/workspace/adapter/DatToText/bin$ ./parsedata -d trade20140221.dat
  2. Incompatibility between headers and library: 6 vs. 4

注释掉下面的宏

  1. // LARGE_DATABASE_SUPPORT - support databases with size larger than 4Gb.
  2. // If this macro is defined FastDB maximal database size is limited by 1 terrabyte.
  3. // Defnining this macro increase iniitial database size and object index size (because
  4. // 64-bit offsetss are used instead fo 4-byte offsets). Also FastDB library compiled with
  5. // LARGE_DATABASE_SUPPOR will not be able to work with database created by library
  6. // built without LARGE_DATABASE_SUPPOR and visa versa.
  7. #if !defined(_WIN32) || defined(_WIN64) // most unixes are now 64-bit, while 32-bit windows is still quite popular
  8. #define LARGE_DATABASE_SUPPORT
  9. #endif

重新编译安装fastdb

跑一下看看 

只做了几个表先跑一下试试,生成数据文件dce_db.fdb,先用客户端试试:
 
  1. frank@frank-ThinkPad-13:~/workspace/adapter/DatToText/bin$ subsql
  2. SubSQL interactive utility for FastDB v. 3.75
  3. Type 'help' for more information
  4. >> help
  5. SubSQL commands:
  6.  
  7. open 'database-name' ( 'database-file-name' ) ';'
  8. select ('*') from <table-name> where <condition> ';'
  9. update <table-name> set <field-name> '=' <expression> {',' <field-name> '=' <expression>} where <condition> ';'
  10. create table <table-name> '('<field-name> <field-type> {',' <field-name> <field-type>}')' ';'
  11. alter table <table-name> '('<field-name> <field-type> {',' <field-name> <field-type>}')' ';'
  12. rename <table-name> '.' <old-field-name> 'to' <new-field-name> ';'
  13. delete from <table-name>
  14. drop table <table-name>
  15. drop index <table-name> {'.' <field-name>} ';'
  16. create index on <table-name> {'.' <field-name>} ';'
  17. drop hash <table-name> {'.' <field-name>};
  18. create hash on <table-name> {'.' <field-name>}field> ';'
  19. insert into <table-name> values '(' <value>{',' <value>} ')' ';'
  20. backup [compactify] 'file-name'
  21. start server URL number-of-threads
  22. stop server URL
  23. start http server URL
  24. stop http server
  25. describe <table-name>
  26. import 'xml-file-name'
  27. export 'xml-file-name'
  28. show
  29. profile
  30. commit
  31. rollback
  32. autocommit (on|off)
  33. exit
  34. help
  35.  
  36. >> open 'dce_db';
  37. >> show
  38. FastDB version : 3.75
  39. Database version : 3.75
  40. Database file size: 1048576 Kb
  41. Object index size : 1048576 handles
  42. Used part of index: 811734 handles
  43. Number of users : 1
  44. Number of readers : 1
  45. Number of writers : 0
  46. Number of blocked readers : 0
  47. Number of blocked writers : 0
  48.  
  49. TABLES:
  50. OID FixedSize Fields Columns TableName
  51. ---------------------------------------------------------
  52. 0x00201c 40 3 3 FTtCreditPreFrozen
  53. 0x002003 52 5 5 FTtMemberClearAccount
  54. 0x002002 76 8 8 FTtClient
  55. 0x000001 52 17 8 Metatable
  56. >> describe FTtMemberClearAccount;
  57.  
  58. OID=0x002003, TableName=FTtMemberClearAccount
  59. No Index FieldType RefTableName FieldName InverseFieldName Flg
  60. --------------------------------------------------------------------------------
  61. 0 H+T String (null) MemberId (null) 3
  62. 1 - String (null) ClearAccountNo (null) 0
  63. 2 - String (null) Status (null) 0
  64. 3 - String (null) RegDate (null) 0
  65. 4 - String (null) LogoutDate (null) 0
  66. >>
  67. >> select * from FTtMemberClearAccount where rowno<10
  68. ;
  69. --------------------------------------------^
  70. Field not found
  71. >> select * from FTtMemberClearAccount ;
  72. MemberId ClearAccountNo Status RegDate LogoutDate
  73. ('0011', '0011', '0', '19930101', ''),
  74. ('0012', '0012', '0', '19930101', ''),
  75. ('0014', '0014', '0', '19930101', ''),
  76. ('0015', '0015', '0', '19930101', ''),
  77. ('0016', '0016', '0', '19930101', ''),
  78. ('0018', '0018', '0', '19990813', ''),
  79. ('0019', '0019', '0', '20000516', ''),
  80. ('0020', '0020', '0', '19930101', ''),
  81. ('0021', '0021', '0', '19930101', ''),
  82. ('0022', '0022', '0', '19990813', ''),
  83. ('0023', '0023', '0', '19990120', ''),
  84. ('0025', '0025', '0', '19990122', ''),
  85. ('0026', '0026', '0', '20001025', ''),
  86. ('0030', '0030', '0', '19930101', ''),
  87. ('0033', '0033', '0', '19930101', ''),
  88. ('0035', '0035', '0', '20010514', ''),
  89. ('0036', '0036', '0', '19930101', ''),
  90. ('0037', '0037', '0', '20001120', ''),
  91. ('0038', '0038', '0', '19930101', ''),
  92. ('0039', '0039', '0', '19930101', ''),
  93. ('0040', '0040', '0', '20000712', ''),
  94. ('0042', '0042', '0', '19991026', ''),
  95. ('0043', '0043', '0', '19990603', ''),
  96. ('0046', '0046', '0', '19930101', ''),
  97. ('0048', '0048', '0', '20000717', ''),
  98. ('0049', '0049', '0', '19990308', ''),
  99. ('0050', '0050', '0', '19930101', ''),
  100. ('0051', '0051', '0', '19930101', ''),
  101. ('0052', '0052', '0', '19930101', ''),
  102. ('0053', '0053', '0', '19990118', ''),
  103. ('0056', '0056', '0', '19991215', ''),
  104. ('0057', '0057', '0', '20001225', ''),
  105. ('0058', '0058', '0', '19930101', ''),
  106. ('0060', '0060', '0', '20021111', ''),
  107. ('0062', '0062', '0', '19990531', ''),
  108. ('0063', '0063', '0', '19990603', ''),
  109. ('0065', '0065', '0', '19930101', ''),
  110. ('0066', '0066', '0', '19990813', ''),
  111. ('0067', '0067', '0', '19991026', ''),
  112. ('0069', '0069', '0', '20001127', ''),
  113. ('0070', '0070', '0', '19930101', ''),
  114. ('0071', '0071', '0', '19991026', ''),
  115. ('0072', '0072', '0', '19991215', ''),
  116. ('0074', '0074', '0', '19930101', ''),
  117. ('0075', '0075', '0', '19930101', ''),
  118. ('0078', '0078', '0', '19930101', ''),
  119. ('0080', '0080', '0', '19930101', ''),
  120. ('0081', '0081', '0', '19930101', ''),
  121. ('0082', '0082', '0', '19990813', ''),
  122. ('0084', '0084', '0', '19990302', ''),
  123. ('0085', '0085', '0', '19930101', ''),
  124. ('0088', '0088', '0', '19930101', ''),
  125. ('0089', '0089', '0', '19930101', ''),
  126. ('0092', '0092', '0', '19990813', ''),
  127. ('0093', '0093', '0', '19990603', ''),
  128. ('0095', '0095', '0', '19930101', ''),
  129. ('0096', '0096', '0', '20011107', ''),
  130. ('0097', '0097', '0', '19930101', ''),
  131. ('0098', '0098', '0', '20090720', ''),
  132. ('0099', '0099', '0', '19930101', ''),
  133. ('0100', '0100', '0', '20000817', ''),
  134. ('0101', '0101', '0', '20001207', ''),
  135. ('0102', '0102', '0', '19930101', ''),
  136. ('0103', '0103', '0', '19930101', ''),
  137. ('0104', '0104', '0', '20010807', ''),
  138. ('0105', '0105', '0', '19930101', ''),
  139. ('0106', '0106', '0', '19990813', ''),
  140. ('0107', '0107', '0', '19930101', ''),
  141. ('0108', '0108', '0', '20000809', ''),
  142. ('0109', '0109', '0', '19930101', ''),
  143. ('0110', '0110', '0', '19930101', ''),
  144. ('0111', '0111', '0', '19991026', ''),
  145. ('0112', '0112', '0', '20000919', ''),
  146. ('0113', '0113', '0', '20001221', ''),
  147. ('0114', '0114', '0', '20010727', ''),
  148. ('0115', '0115', '0', '19930101', ''),
  149. ('0117', '0117', '0', '19930101', ''),
  150. ('0118', '0118', '0', '19930101', ''),
  151. ('0120', '0120', '0', '19930101', ''),
  152. ('0121', '0121', '0', '19930101', ''),
  153. ('0122', '0122', '0', '19930101', ''),
  154. ('0123', '0123', '0', '19930101', ''),
  155. ('0125', '0125', '0', '19930101', ''),
  156. ('0126', '0126', '0', '19990813', ''),
  157. ('0129', '0129', '0', '20001218', ''),
  158. ('0133', '0133', '0', '19930101', ''),
  159. ('0134', '0134', '0', '20010625', ''),
  160. ('0135', '0135', '0', '19930101', ''),
  161. ('0136', '0136', '0', '19930101', ''),
  162. ('0138', '0138', '0', '19930101', ''),
  163. ('0139', '0139', '0', '20021223', ''),
  164. ('0141', '0141', '0', '20010216', ''),
  165. ('0143', '0143', '0', '20030403', ''),
  166. ('0145', '0145', '0', '19930101', ''),
  167. ('0147', '0147', '0', '20010607', ''),
  168. ('0148', '0148', '0', '20000801', ''),
  169. ('0149', '0149', '0', '19930101', ''),
  170. ('0150', '0150', '0', '19990813', ''),
  171. ('0151', '0151', '0', '19930101', ''),
  172. ('0152', '0152', '0', '19930101', ''),
  173. ('0153', '0153', '0', '19930101', ''),
  174. ('0155', '0155', '0', '20010424', ''),
  175. ('0156', '0156', '0', '19930101', ''),
  176. ('0157', '0157', '0', '19930101', ''),
  177. ('0158', '0158', '0', '19930101', ''),
  178. ('0160', '0160', '0', '19930101', ''),
  179. ('0161', '0161', '0', '19930101', ''),
  180. ('0164', '0164', '0', '20010711', ''),
  181. ('0165', '0165', '0', '19930101', ''),
  182. ('0166', '0166', '0', '19991215', ''),
  183. ('0167', '0167', '0', '19930101', ''),
  184. ('0168', '0168', '0', '19930101', ''),
  185. ('0169', '0169', '0', '19930101', ''),
  186. ('0170', '0170', '0', '19930101', ''),
  187. ('0171', '0171', '0', '19930101', ''),
  188. ('0172', '0172', '0', '20011224', ''),
  189. ('0173', '0173', '0', '19991215', ''),
  190. ('0175', '0175', '0', '19930101', ''),
  191. ('0176', '0176', '0', '19930101', ''),
  192. ('0177', '0177', '0', '19990813', ''),
  193. ('0178', '0178', '0', '20000712', ''),
  194. ('0180', '0180', '0', '19930101', ''),
  195. ('0181', '0181', '0', '19930101', ''),
  196. ('0182', '0182', '0', '20000920', ''),
  197. ('0183', '0183', '0', '20060328', ''),
  198. ('0184', '0184', '0', '20010530', ''),
  199. ('0185', '0185', '0', '19930101', ''),
  200. ('0186', '0186', '0', '20000318', ''),
  201. ('0187', '0187', '0', '19981221', ''),
  202. ('0188', '0188', '0', '20010205', ''),
  203. ('0189', '0189', '0', '20000804', ''),
  204. ('0190', '0190', '0', '20000428', ''),
  205. ('0192', '0192', '0', '20000422', ''),
  206. ('0194', '0194', '0', '20011024', ''),
  207. ('0195', '0195', '0', '20000824', ''),
  208. ('0196', '0196', '0', '20000301', ''),
  209. ('0200', '0200', '0', '20010326', ''),
  210. ('0201', '0201', '0', '20010808', ''),
  211. ('0202', '0202', '0', '20011016', ''),
  212. ('0203', '0203', '0', '20020404', ''),
  213. ('0205', '0205', '0', '20011025', ''),
  214. ('0206', '0206', '0', '20010716', ''),
  215. ('0207', '0207', '0', '20011121', ''),
  216. ('0208', '0208', '0', '20011015', ''),
  217. ('0209', '0209', '0', '20010824', ''),
  218. ('0210', '0210', '0', '20020129', ''),
  219. ('0211', '0211', '0', '20011228', ''),
  220. ('0212', '0212', '0', '20011214', ''),
  221. ('0213', '0213', '0', '20020418', ''),
  222. ('0215', '0215', '0', '20020419', ''),
  223. ('0216', '0216', '0', '20020312', ''),
  224. ('0218', '0218', '0', '20020603', ''),
  225. ('0219', '0219', '0', '20020110', ''),
  226. ('0221', '0221', '0', '20030701', ''),
  227. ('0222', '0222', '0', '20030818', ''),
  228. ('0223', '0223', '0', '20030729', ''),
  229. ('0225', '0225', '0', '20031016', ''),
  230. ('0226', '0226', '0', '20030919', ''),
  231. ('0227', '0227', '0', '20031226', ''),
  232. ('0228', '0228', '0', '20040701', ''),
  233. ('0229', '0229', '0', '20040812', ''),
  234. ('0230', '0230', '0', '20040909', ''),
  235. ('0233', '0233', '0', '20050113', ''),
  236. ('0235', '0235', '0', '20050221', ''),
  237. ('0236', '0236', '0', '20051012', ''),
  238. ('0238', '0238', '0', '20061222', ''),
  239. ('0239', '0239', '0', '20070425', ''),
  240. ('0240', '0240', '0', '20071217', ''),
  241. ('0241', '0241', '0', '20080505', ''),
  242. ('0242', '0242', '0', '20080508', ''),
  243. ('0243', '0243', '0', '20080721', ''),
  244. ('0244', '0244', '0', '20081219', ''),
  245. ('0245', '0245', '0', '20090717', ''),
  246. ('0246', '0246', '0', '20100311', ''),
  247. ('0247', '0247', '0', '20100715', ''),
  248. ('0901', '0901', '0', '20100826', ''),
  249. ('0902', '0902', '0', '20100331', ''),
  250. ('0903', '0903', '0', '20110906', ''),
  251. ('0904', '0904', '0', '20100917', ''),
  252. ('0905', '0905', '0', '20110321', ''),
  253. ('0906', '0906', '0', '20110314', ''),
  254. ('0907', '0907', '0', '20110524', ''),
  255. ('0908', '0908', '0', '20110708', ''),
  256. ('0910', '0910', '0', '20130917', '')
  257.  184 records selected
  258. >>
  • 后面的工作 

     

    接下来就是要吧所有表都实现,当然,懒人一定不会手写代码的,生成代码脚本走起;脚本写完再回来~
  1. $grep REGISTER MemDefs.h | awk -F ')' '{print $1 ");"}' > register.cpp
  2. $grep class MemDefs.h.v0 | awk -F '\r' '{print $1 $2 ";"}' > class.cpp
  3. $grep class MemDefs.h.v0 |awk -F '\r' '{print $1}'| awk '{print "void Insert" $2 "(" $2 " *fld);"}'> method.cpp
  4. $sed -i 's/InsertCTt/Insert/g' method.cpp

 

  • 数据文件最大两个G,大了就core。调试了一天,改了一大堆源码,设置各种选项,未果………… 
    注释里面很明显给出了参数,可以设置64位的支持。
  1. /* define database offset bit size */
  2. #define dbDatabaseOffsetBits 32

默认值是32,之前也尝试修改该参数,正常理解我改成过64,启动程序就core。这下晕了,继续看代码,里面给的例子是38,代码里面还是40的影子。更晕。 
最后发现这个值得意义是2**32=2G,那理论上改大应该没问题,比如64,但是,看了代码之后发现他会先检查内存,因为fastdb认为所有数据都可以放在内存里面,如果设大了那么它会认为内存不过,所以最后设置为33,即4G。 
* 这个问题算是解决了*

链接地址: http://blog.leanote.com/post/frank.x@aliyun.com/dat%E6%96%87%E4%BB%B6%E8%BD%ACfastdb

 类似资料: