fastdb相关备忘

32 篇文章 3 订阅

选择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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述FastDB是一个高效率的内存数据库系统,具有实时性能和方便的C++接口。 FastDB并不支持客户端/服务器结构,所有使用FastDB数据库的应用程序都必须运行在同一台主机上。FastDB为具有主导读取访问模式的应用程序作了优化。通过消除数据传输的开销和使用高性能的锁工具实现了查询执行的高速度。数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射。所以查询在应用程序的任务中执行,不需要进行任务切换和数据传输。在FastDB中,通过原子指令来实现对数据库并发访问的同步,对查询处理几乎不增加任何开销。FastDB假设整个数据库都在当前内存中,并且在这个假设的基础上优化查询算法和结构。另外,数据库缓存管理几乎不会给FastDB增加任何开销,同时FastDB也不需要在数据库文件和缓冲池中进行数据传送。这就是为什么FastDB比将所有数据放在缓冲池中的传统数据库明显速度快的原因。   FastDB支持事务、在线备份和系统崩溃之后的自动恢复。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作。恢复操作执行起来非常快,给关键应用程序提供了高效率。另外,它还取消了事务日志,提高了系统的整体性能,并且能够更加有效地使用系统资源。   FastDB是面向应用程序的数据库,使用应用程序的类信息来构建数据库的表。FastDB支持自动系统赋值,只允许你在一个地方——你的应用程序的类中,改变它们的值。FastDB为从数据库中提取数据提供了一个灵活而方便的接口。使用类似于SQL的语言来书写查询语句。这些非原子字段、嵌套数组、用户自定义类型和方法、直接指向对象内部的指针等后关系性能,简化了数据库应用程序的设计,并且使得它们更加高效。   虽然FastDB的优化是基于整个数据库都存放在机器的物理内存的这个假设上的,我们依然可以将FastDB使用在那些大小超过系统物理内存的数据库上。最后,标准操作系统的交换机制将会起作用。但是所有的FastDB的算法和结构的优化都是基于数据存放在内存中这个假设上的,所以数据交换的效率不会很高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值