以用户为中心的SNS站点数据库设计及实现
?
?
?
?
?
DbMysql 继承自Db,? AdvModel,ViewModel,RelationModel继承自Model类,Model类调用DB类进行具体的数据库操作
比如查询所有用户操作
?
具体cache实现类继承自cache类
使用如下
自定义model类? DistrictModel 继承自 MetaModel , MetaModel继承自Model , 在MetaModel类中实现缓存调用
?
?<?php
//+----------------------------------
// | WoShiMaiJia Projcet
// +----------------------------------
// | Copyright (c) 2010 http://woshimaijia.com All rights reserved.
//+----------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
//+----------------------------------
// | Author: xinqiyang <517577550@qq.com>
//+----------------------------------
/**
?
* 元数据基类
?
* 提供了缓存操作功能及基本的CRUD操作功能
?
* @author xinqiyang
?
*
?
*/
class
MetaModel
extends
Model
{
???
//缓存实例
???
protected
$cache
;
???
/**
????
* 返回一个缓存操作实例
????
*/
???
function
_initialize()
???
{
?????
//如果未设置则设置缓存实例
?????
if
(!isset(
$this
->cache))
?????
{
????????
$this
->cache= Cache::getInstance(
'Memcache'
);
?????
}
???
}
??
????
/**
????
* 删除缓存
????
* @param$cachename 缓存名称
????
*/
???
protected
function
rm(
$cachename
)
???
{
?????
$this
->cache->rm(
$cachename
);
???
}
}
?>
?
这里以城市表信息的memcache缓存为例来实现缓存的获取及调用
?
?<?php
class
DistrictModel
extends
MetaModel
{
??
????
/**
????
* 获取省市区
????
* TODO:现在先用文件缓存,部署memcache后用 内存缓存就好了
????
*/
???
public
function
getDistrict()
???
{
?????
//获得数据
?????
if
(!
$this
->cache->get(
'district'
))
?????
{
?????????
//写入cache,5000多条的时候就挂掉了,数据不能超过1M
?????????
$this
->cache->set(
'district'
,
$this
->where(
'level=2 or id in (1,2,9,22)'
)- >select(),0,-1);
??
??????
}
?????
return
$this
->cache->get(
'district'
);
????
}
}
?>
?
调用过程,在调用过程中,先创建cache实例,在进行调用,缓存数据,如果缓存数据则直接读取数据
本文主要是从大家设计过程中常见的问题进行讨论,对于数据库设计方面还存在很多的不足,大家是否在项目中也是自己设计的呢?
如果是的话,希望大家能够多提出意见
<script type="text/javascript"></script>