- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.2 Freeze 连接 示例:连接及map对象的创建 … // 首先,创建连接 Freeze::ConnectionPtr pConnection = Freeze::createConnection(pCommunicator, strDbEnvName); // 这里需要传入一个通信器,和文件数据库的名字(名字可包含存放路径) // 再创建map对象 MyMapPtr pMap = MyMapPtr(new MyMap(pConnection, strDBFileName)); // 这里实例化一个map对象,map类型为用户在Slice中定义的map类型; // 需要指定映射后的文件名: strDBFileName; … 创建好map对象后,就可以像使用STL map类似使用这个map了(注意多线程访问问题) 4. Freeze Map使用 4.3 事务 Freeze Map支持事务。 你可以将一组数据库更新操作放入一个事务内,以保证这一批更新操作是原子的。 如果不使用事务,那么每个非迭代更新都有自己内部事务。每个读写迭代器也有自己关联的内部事务,当迭代器关闭时事务会被提交。 示例: { … { TransactionHolder tx2(connection); // Does nothing? // update database … mit(); } // 如果前面因为错误导致tx2没有提交,则tx2析构时会自动调用rollback } 4. Freeze Map使用 4.4 迭代器 迭代器允许你遍历FreezeMap的内容。 迭代器是用BerkeleyDB的游标实现的,并且打开迭代器时会锁住数据库文件。 C++提供“只读”和“读写”迭代器;java里,如果迭代器是在事务上下文内获取的就是读写迭代器,否则是只读迭代器。 迭代器关闭时,如果没有使用事物,锁会自动释放。如果使用了事物,锁会随事物的关闭而关闭。 注意:下面的情况你需要显示关闭迭代器: 你没有使用事物; 已有一个打开的迭代器用于更新映射表; 在同一个线程,你读取映射表; 4. Freeze Map使用 4.5 从死锁异常中恢复 多线程访问FreezeMap时,可能发生死锁异常; 应用程序应该捕获Freeze::DeadlockException异常,然后重试事务或迭代操作 while (true) { try{ // update … break; } catch (const DeadlockException ){ continue; } } 4. Freeze Map使用 4.6 键值排序 Freeze Map的键值总是排序的。默认Freeze根据键值的Ice二进制编码排序。 在C++中,自定义的比较器是在代码生成阶段指定的。Java中是在运行时提供的。 例如:C++中执行slice2freeze时在—dict参数中加入sort选项 - -dict NAME,KEY,VALUE,sort,COMPARE 这里COMPARE是一个用于比较的函数类。 缺省COMPARE为std::lessKEY 4. Freeze Map使用 4.7 索引Map 在生成Map时如果定义了索引,则Freeze Map支持高效的反向查找。 注意: 增加索引会增加BDB的写操作负担,因为更新会同时去查找索引,如果索引也需要更新,则更新索引。 执行slice2freeze时加入- -dict-index MAP[,MEMBER]参数, 其中MAP为索引名,MEMBER为freezemap的value值的成员(如果value是结构或类类型) 加了索引的话,生成的freezemap会多出一些成员: findByMEMBER() beginForMEMBER() endForMEMBER() … 4. Freeze Map使用 4.8 在C++中使用Freeze Map 步骤: (1)使用slice2freeze创建Freezemap C++类; slice2freeze –dict StringIntMap,string,int StringIntMap 这里创建一个名为StringIntMap,键值为string,value为int的FreezeMap,生成的文件名为StringIntMap(最后一个参数)。 (2)创建数据库连接 Freeze::ConnectionPtr conn = Freeze::createConnect
您可能关注的文档
- 四年级上册单元三作文——我喜欢的小动物介绍.ppt
- 百普乐幻灯片-5.23选编.ppt
- 四年级上册单元四作文——我喜欢的小动物介绍.ppt
- 2017版高考生物一轮复习第10单元生态系统及稳定性第2讲生态系统的能量流动选编.ppt
- introductiontoMarieCurie选编.ppt
- 2017版高考生物一轮复习第8单元个体水平的生命活动调节第1讲人体的内环境与稳态选编.ppt
- 设计概论第四讲环境艺术设计介绍.ppt
- 设计模式实例-设计一个文档编辑器介绍.ppt
- 2017版高考生物一轮复习第7单元生物的变异、育种与进化第4讲现代生物进化理论选编.ppt
- 2017版高考生物一轮复习第7单元生物的变异、育种与进化第1讲基因突变与基因重组选编.ppt
最近下载
- 橡胶工艺-橡胶的老化与防护体系.doc VIP
- 白皮书欧盟电池法规概览.docx VIP
- 预防校园欺凌主题班会(课件).ppt VIP
- 3M3M DBI-SALA Fall Protection Full Line Catalog说明书用户手册.pdf
- 2025年广东机电职业技术学院单招职业技能测试题库附答案(综合题).docx VIP
- NY-T-815-2004-肉牛饲养标准.pdf VIP
- 架桥机安装拆卸监理细则.pdf VIP
- DB53_T810-2016 桥梁有效预应力检测技术规程.docx VIP
- 综合实践活动课教学设计(通用16篇).docx VIP
- 基于智能优化算法的爆破设计参数优化方法及装置.pdf VIP
原创力文档


文档评论(0)