SQLite做为本地缓存应注意的几大方面

发表于:2011-2-21 10:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Tecky Li    来源:51Testing软件测试网采编

  今天看到了园友陆敏计的一篇文章<<C#数据本地存储方案之SQLite>>, 写到了SQLite的诸多优点,尤其适应于本地数据缓存和应用程序。

  转自陆兄的内容,来夸夸Sqlite:

  SQLite官方网站时第一眼看到关于SQLite的特性。

  1. ACID事务

  2. 零配置 – 无需安装和管理配置

  3. 储存在单一磁盘文件中的一个完整的数据库

  4. 数据库文件可以在不同字节顺序的机器间自由的共享

  5. 支持数据库大小至2TB

  6. 足够小, 大致3万行C代码, 250K

  7. 比一些流行的数据库在大部分普通数据库操作要快

  8. 简单, 轻松的API

  9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

  10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

  11. 独立: 没有额外依赖

  12. Source完全的Open, 你可以用于任何用途, 包括出售它

  13. 支持多种开发语言,C, PHP, Perl, Java, ASP .NET,Python

  正好前一段时间我做了这方面的应用,我就结合陆兄的这篇文章,谈谈我在Sqlite本地缓存业务数据时的经验,给大家借鉴一下。我开发时比较仓促,很多地方请大家多提意见。

  解决的问题

  首先介绍我用Sqlite解决的实际问题是什么?

  问题1:某个功能的数据需要连接一个远程数据库查询速度很慢,查一次数据不容易,希望能够重复利用之前查过的数据集。

  问题2:非常大的数据量比如几千万甚至几亿条数据,一次性读取到DataTable中,会内存溢出的,所以在第一次分析时就是通过Reader的方式,分析完一条后并不在内存中保存,但是紧接着用户的第二次分析、第三次分析还是要用到的第一次分析的数据,如果我们重新查询一次远程服务器,效率可想而知啊。

  结合上面的2个问题,为了解决效率问题和数据重复利用度,减少数据库服务器的压力,我才用Sqlite缓存数据(当然这不是唯一也不是最好的解决方案) 。

  优化SQLiteHelper

  陆兄的SQLiteHelper类我增加了几个有用的方法:

  第一个方法是GetSchema,得到某个表的表结构。

  1. /// <summary>     
  2. /// 查询数据库中的所有数据类型信息     
  3. /// </summary>     
  4. /// <returns></returns>     
  5. public DataTable GetSchema()  
  6. {  
  7.     using (SQLiteConnection connection = new SQLiteConnection(connectionString))  
  8.     {  
  9.         connection.Open();  
  10.         DataTable data = connection.GetSchema("TABLES");  
  11.         connection.Close();  
  12.         //foreach (DataColumn column in data.Columns)     
  13.         //{     
  14.         //    Console.WriteLine(column.ColumnName);     
  15.         //}     
  16.         return data;  
  17.     }  
  18. }

51/512345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号