用Sqlite3 构建中小型网站数据库

     最近接触了一段时间的 Sqlite3 数据库,越来越喜欢这个轻巧的数据库了。其优点是不需要安装,体积小;程序中使用也不需服务器安装额外的驱动程序,这点在嵌入式开发中优势显而易见; 不过对于用惯了图形化界面操作的我来说,刚开始还不太习惯,操作尤其不方便;在网上看了一下资料,大致说其性能是和 Access 有得一拼(基本上是处于一个数量级上);我在想:对于一个用户几百万的网站来说能不能使用这一轻量级的数据库呢?我觉得可行。在数据库调优中我们常见的是分库分表,这个完全可以用于 Sqlite3 上,我的思路是:比如站点共有100万用户, 有一个要求是用户的每个动作都要记录,例如每发表一篇博文,都要记录其发布时间,发布 ip等信息, 而这个信息在其个人动态中展示出来,这个时候我们可以设计一个库出来: templateDB.db3 : 其中一个表结构如下(sample):

假如某个用户的 userid = 1051170 ; 那么我们可以通过一定的算法: userid/1000 = (int)1051 (意即每个 db 只服务于 1000 个用户的某些模块)将其放在 /data/action_1051.db3 中,在做插入之前检查一下 该库是否存在,如不存在则拷贝一份 templatedb 到为目标库;这样能很大程度上减少了数据并发带来的锁问题,减轻主数据库服务压力。
    当然这样的设计也有不足之处:假如在投入实际生产过程一段时间后 ,我们需要改变表的某些结构或增加某个模块,这个改动将是灾难性的。




最后附上使用笔记(我使用的是 ms Entlib 4.1框架 + vs 2008 ):
1. 到官方网站下载 http://www.sqlite.org/ 下载 sqlite3 并创建数据库及表;
2. 到 http://sqlite.phxsoftware.com/ 上下载 System.Data.SQLite.dll ,然后在项目中添加引用;
3. web.config 配置

1       < connectionStrings >
2           < add name = " sqlite "  connectionString = " data source= E:/workspace/CSharpTest/SQLiteApp/App_Data/userscore.db "  providerName = " System.Data.SQLite " />
3       </ connectionStrings >
4 

4. 查询:

ExpandedBlockStart.gif 查询数据
 1           private   void  bind() {
 2              Database db  =  DatabaseFactory.CreateDatabase( " sqlite " );
 3               string  sql  =   " select * from userAction  " ;
 4              DataSet ds  =  db.ExecuteDataSet(CommandType.Text, sql);
 5               if  (ds  !=   null )
 6              {
 7                   if  (ds.Tables[ 0 ].Rows.Count  >   0 )
 8                  {
 9                      gdvlist.DataSource  =  ds;
10                      gdvlist.DataBind();
11                  }
12              }
13          }
14 

5. 增加数据:

ExpandedBlockStart.gif 插入数据
 1           protected   void  Button1_Click( object  sender, EventArgs e)
 2          {
 3              Database db  =  DatabaseFactory.CreateDatabase( " sqlite " );
 4               string  sql  =   " insert into userAction(userid, username,nickname, scoretype, score, content, addip)  "
 5                           +   " values(@userid, @username,@nickname, @scoretype, @score, @content, @addip)  " ;
 6              DbCommand cmd  =  db.GetSqlStringCommand(sql);
 7              db.AddInParameter(cmd,  " @userid " , DbType.String,  int .Parse(tbuid.Text) );
 8              db.AddInParameter(cmd,  " @username " , DbType.String, tbuserName.Text);
 9              db.AddInParameter(cmd,  " @nickname " , DbType.String, tbnick.Text);
10              db.AddInParameter(cmd,  " @scoretype " , DbType.String, tbsctype.Text );
11              db.AddInParameter(cmd,  " @score " , DbType.Int32,  int .Parse( tbscore.Text) );
12              db.AddInParameter(cmd,  " @content " , DbType.String, tbcontent.Text);
13              db.AddInParameter(cmd,  " @addip " , DbType.String, Request.UserHostAddress);
14              db.ExecuteNonQuery(cmd);
15              Response.Write( " 成功! " );
16              bind();
17          }
18 


效果:

呵...和其他数据库操作没有两样。







转载于:https://www.cnblogs.com/infozero/archive/2009/12/06/1618202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值