在桌面应用程序中使用嵌入式关系数据 |
发布: 2011-04-26 21:36 |
桌面应用程序,与网络应该程序一样,也需要记录用户的当前使用状态, 在用户下次使用时,可以使用这些状态数据还原到用户上次的状态。 对于像一些日程表工具,桌面笔记,联系人卡片,都需要记录关系型数据。 在数据量小的时候,随便使用的一种格式的数据文件,甚至文本文件都可以, 但如果用户的数据量大了,还是使用正式的数据库更有伸缩性,扩展性。 但是正式的关系数据库,即使最小最快的sqlite,在真正使用的时候,都会有一些额外的开销, 表现在程序响应慢等问题,却是为了扩展性,损失性能的一鲜活的应用场景。 虽然说,对于特定的应用,可以实现特定的针对此应用的数据库也许多效率更高, 很多时候必要性不那么大,一般也就不是最优选择。 自己做过几个小应用使用嵌入式sqlite数据库,但几次都没有找到一种好的维护方法, 导致在更新到读写数据库/创建新数据库的时候,响应慢,不浅显流畅,所以不需要仔细做些研究, 在使用方式,数据库优化方面找到方法。 有一本书叫 Asynchronous Database Access with Qt 4.x,就是解决这个问题的,参考。 根据这个资料,找到一种使用异步数据库操作的方法,需要加一个单独的线程处理所有的数据库请求。 由于是异步的,需要要Qt的网络API一样,给每个请求分配一个数字序号,在调用立即返回这个数据。 当请求的数据库操作完成时,把这个请求序号与数据库处理结果一起返回给调用端,调用端需要根据 请求序号来做数据库操作的后续处理,这要求调用端需要维护一个请求序号与调用返回数据的处理函数相应的 映射,以便在数据返回时做相应的处理。 这个映射可以使用存储qt的SLOT的方法,或者也可以使用C++0x的functor来处理,现在已经都比较方便了。 |
原文: http://qtchina.tk/?q=node/575 |
Powered by zexport
|