喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

招聘PHP开发人员(北京)

上一主题 下一主题
 14  1/2  1  2  > 
     
标题: [问题] 关于数据内存优化  
 
xieaotian (老老仙)
版主
Rank: 7Rank: 7Rank: 7


UID 82205
精华 1
积分 1270
帖子 1499
金钱 1270 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2006-10-26
来自 老老神仙部落
状态 离线
[广告]: 代充Paypal帐号美元
关于数据内存优化

如题,有人知道怎么把数据库里的数据暂存内存吗,然后通过内存进行读取。
我们同事说,这样访问速度块,还可以减轻数据库压力!




http://www.okpython.com
让中国的python发展的更快。
2007-9-3 10:41 AM#1
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
只爱一个人 (只爱一个人)
论坛元老
Rank: 8Rank: 8
超级管理员



UID 29639
精华 0
积分 3779
帖子 1617
金钱 3779 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2004-6-26
状态 离线
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
memcache



customavatars/296392.jpg
2007-9-3 10:48 AM#2
查看资料  访问主页  Blog  发短消息  顶部
 
LuckLrj (中国php中的爱因斯坦)
版主
Rank: 7Rank: 7Rank: 7
老会员


UID 64836
精华 0
积分 2323
帖子 3118
金钱 2323 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2005-6-19
状态 离线
[推荐阅读] 请问同一个表如何用其中一个字段更新另一个字段?
一个服务器不要用memcache了。



学习,工作累了,请访问我的小站,娱乐一下。http://www.52sunny.net
2007-9-3 12:14 PM#3
查看资料  Blog  发短消息  顶部
 
sunjava (sunjava)
金牌会员
Rank: 6Rank: 6
资深会员


UID 19622
精华 0
积分 1264
帖子 1239
金钱 1264 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2003-4-15
状态 离线
[推荐阅读] JS做的分页


QUOTE:
原帖由 LuckLrj 于 2007-9-3 12:14 PM 发表
一个服务器不要用memcache了。
为啥一个服务器就不需要了呢??

实践证明memcache效果非常明显而且命中率非常高,可以达到95%以上




PHP开发者,PHP新手社区
2007-9-3 03:46 PM#4
查看资料  访问主页  发短消息  QQ  顶部
 
niohe (网缘伟伟)
论坛元老
Rank: 8Rank: 8
PHPOX


UID 73469
精华 0
积分 3134
帖子 571
金钱 3134 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2006-5-16
来自 吉林延边
状态 离线
[推荐阅读] 求字符转换问题
ado.net里有dataset 不知道php能不能调用 呵呵!



QQ:86958842,承接各种小型网站项目.我的BLOG http://www.aitao8.cn/
2007-9-3 08:10 PM#5
查看资料  访问主页  发短消息  QQ  顶部
 
奶瓶 (NP博士)
版主
Rank: 7Rank: 7Rank: 7
老仙


UID 52707
精华 4
积分 5560
帖子 6232
金钱 5510 喜悦币
威望 50
人脉 0
阅读权限 100
注册 2004-11-22
来自 北大中文系
状态 离线
[推荐阅读] mysql经常崩溃(错误代码10061),再次安装也报同样的错误
单台服务器可以使用APC等本地内存缓存
memcached即使使用localhost也要通过port方式,接收完整的数据包,这个开销还是比较大的
命中率高低和memcached本身无关,详细内容参考本人2月初文章

一个小实例,来自BSM(本人的开源垃圾):
下面是数据库抽象层,由于需要对PHP4支持,所以使用传统方式,没有使用接口

<?php

/**
*
* @package db
* @version $Id: dbal.php,v 1.0.0 2006/11/9 23:29:30 Dr.NP Exp $
* @copyright (c) 2006 BS.Group
* @author Dr.NP <[email]bssoft@263.net[/email]>
* @license [url]http://opensource.org/licenses/gpl-license.php[/url] GNU Public License
*
*/

/**
* Database Handler Abstraction Layer
* @since 2006-11-9
* @package db
*/
class dbal
{
    var 
$classname                'dbal';

    
/**
    * Current connection identifier
    */
    
var $db_connection_id;

    
/**
    * Query result
    */
    
var $query_result;

    
/**
    * Stat of queries
    */
    
var $num_queries            = array();

    
/**
    * Cache flag
    */
    
var $query_fromcache        false;

    
/**
    * Cache content
    */
    
var $cache_content            '';

    
/**
    * Cache cursor
    */
    
var $cache_offset            0;

    
/**
    * Transaction status
    */
    
var $sql_transaction        false;

    
/**
    * Connection informations
    */
    
var $conn_host;
    var 
$conn_port;
    var 
$conn_user;
    var 
$conn_dbname            '';
    var 
$conn_persistency        false;

    
/**
    * Constructor
    */
    
function dbal()
    {
        
$this->num_queries = array(
            
'normal'            => 0,
            
'cached'            => 0,
            
'failed'            => 0
        
);
    }

    
/**
    * Fetch how many times query
    */
    
function sql_num_queries()
    {
        return 
$this->num_queries;
    }

    
/**
    * Base query method
    */
    
function sql_query($query$fromcache false$cache_key false)
    {
        if (
'SELECT' != strtoupper(substr($query06)))
        {
            
$fromecache false;
            
$this->query_fromcache false;

            if (
defined('CACHE_LAYER') && $cache_key)
            {
                global 
$cache;

                
$cache->del($cache_key);
            }
        }

        
// Cache enabled?
        
if (defined('CACHE_LAYER') && $fromcache)
        {
            global 
$cache;
            
$query_cache_key = ($cache_key) ? $cache_key $query;
            
$content $cache->get($query_cache_key);

            if (
false != $content)
            {
                
$this->query_fromcache true;
                
$this->num_queries['cached'] += 1;
                
$this->cache_content unserialize($content);
                return 
true;
            }
        }

        
$ret $this->_sql_query($query);
        
$this->query_fromcache false;
        if (
defined('CACHE_LAYER') && $fromcache)
        {
            
$cache->set($query_cache_keyserialize($this->sql_fetchrowset()));
        }

        return 
$ret;
    }

    
/**
    * Fetch rowset
    */
    
function sql_fetchrow($query_id false)
    {
        
// From cache
        
if (defined('CACHE_LAYER') && $this->query_fromcache)
        {
            
$result $this->cache_content[$this->cache_offset];
            
$this->cache_offset++;

            if (
$result)
            {
                return 
$result;
            }
        }

        return 
$this->_sql_fetchrow($query_id);
    }

    
/**
    * Get all rows by query
    */
    
function sql_fetchrowset($query_id false)
    {
        if (
defined('CACHE_LAYER') && $this->query_fromcache)
        {
            
$result $this->cache_content;

            if (
is_array($result))
            {
                return 
$result;
            }
        }

        if (!
$query_id)
        {
            
$query_id $this->query_result;
        }

        if (
$query_id)
        {
            
$this->sql_rowseek(0);
            
$result = array();
            while (
$row $this->_sql_fetchrow($query_id))
            {
                
$result[] = $row;
            }

            return 
$result;
        }

        return 
false;
    }

    
/**
    * Get one element by query
    */
    
function sql_fetchone($query_id false)
    {
        if (!
$query_id)
        {
            
$query_id $this->query_result;
        }

        if (
$query_id)
        {
            
$row $this->sql_fetchrow($query_id);
            if (
is_array($row))
            {
                
$result array_shift($row);
                unset(
$row);
                return 
$result;
            }
        }

        return 
false;
    }

    
/**
    * Close SQL Connection
    */
    
function sql_close()
    {
        if (!
$this->db_connection_id && !$this->master_db_connection_id && !$this->slave_db_connection_id)
        {
            return 
false;
        }

        if (
$this->transaction)
        {
            
$this->sql_transaction('commit');
        }

        return 
$this->_sql_close();
    }

    
/**
    * SQL Transaction
    */
    
function sql_transaction($status 'begin')
    {
        switch (
$status)
        {
            case 
'begin':
                
// Commit previously opened transaction before opening another transaction
                
if ($this->transaction)
                {
                    
$this->_sql_transaction('commit');
                }

                
$result $this->_sql_transaction('begin');
                
$this->transaction true;
            break;

            case 
'commit':
                
$result $this->_sql_transaction('commit');
                
$this->transaction false;

                if (!
$result)
                {
                    
$this->_sql_transaction('rollback');
                }
            break;

            case 
'rollback':
                
$result $this->_sql_transaction('rollback');
                
$this->transaction false;
            break;

            default:
                
$result $this->_sql_transaction($status);
            break;
        }

        return 
$result;
    }
}

?>





图片包子,注册送100包子!
2007-9-3 11:51 PM#6
查看资料  访问主页  Blog  发短消息  QQ  ICQ 状态  Yahoo!  顶部
 
奶瓶 (NP博士)
版主
Rank: 7Rank: 7Rank: 7
老仙


UID 52707
精华 4
积分 5560
帖子 6232
金钱 5510 喜悦币
威望 50
人脉 0
阅读权限 100
注册 2004-11-22
来自 北大中文系
状态 离线
[推荐阅读] 找高手解决:mysql数据库不能写入的问题
MySQL的实现(注意这个东西支持主从结构,在SELECT的时候会自动连接从库)

<?php

/**
*
* @package db
* @version $Id: db.mysql.mod.php,v 1.0.0 2006/11/9 23:58:36 Dr.NP Exp $
* @copyright (c) 2006 BS.Group
* @author Dr.NP <[email]bssoft@263.net[/email]>
* @license [url]http://opensource.org/licenses/gpl-license.php[/url] GNU Public License
*
*/

// Abstraction layer needed.
require_once($module_root 'db/dbal.' $phpEx);

/**
* Database Handler: Mysql
* @since 2006-11-9
* @package db
*/

class BsmDbMysql extends dbal
{
    var 
$classname                'BsmDbMysql';

    
/**
    * Set this for enable MySQL Master/Slave bin-log backup mode
    */
    
var $is_master_slave        false;

    
/**
    * For Master/Slave below:
    */
    
var $master_conn_host;
    var 
$master_conn_user;
    var 
$master_conn_dbname;
    var 
$master_db_connection_id;

    var 
$slave_conn_host;
    var 
$slave_conn_user;
    var 
$slave_conn_dbname;
    var 
$slave_db_connection_id;

    var 
$srv_flag;

    
/**
    * Constructor
    */
    
function BsmDbMysql($is_master_slave false)
    {
        
$this->is_master_slave = ($is_master_slave) ? true false;
        return 
$this->dbal();
    }

    
/**
    * Connect to the database
    */
    
function sql_connect($db_host$db_port$db_user$db_pass$db_name$persistency$is_master false)
    {
        
$this->persistency $persistency;
        
$db_host $db_host . (($db_port) ? ':' $db_port '');

        if (!
$this->is_master_slave)
        {
            
$this->conn_host $db_host;
            
$this->conn_user $db_user;
            
$this->conn_dbname $db_name;
        }

        else
        {
            
$srv_flag = ($is_master) ? 'master' 'slave';

            if (
$is_master)
            {
                
$this->master_conn_host $db_host;
                
$this->master_conn_user $db_user;
                
$this->master_conn_dbname $db_name;
            }

            else
            {
                
$this->slave_conn_host $db_host;
                
$this->slave_conn_user $db_user;
                
$this->slave_conn_dbname $db_name;
            }
        }

        if (
$this->persistency)
        {
            
$r = @mysql_pconnect($db_host$db_user$db_pass);
        }

        else
        {
            
$r = @mysql_connect($db_host$db_user$db_pass);
        }

        if (
$r && @mysql_select_db($db_name$r))
        {
            if (!
$this->is_master_slave)
            {
                
$this->db_connection_id $r;
            }

            else
            {
                if (
$is_master)
                {
                    
$this->master_db_connection_id $r;
                }

                else
                {
                    
$this->slave_db_connection_id $r;
                }

                
$this->srv_flag $srv_flag;
            }

            
// UTF-8 here...
            
@mysql_query("SET NAMES utf8"$r);
            return 
$r;
        }

        return 
$this->sql_error();
    }

    
/**
    * Return number of rows
    */
    
function sql_numrows($query_id false)
    {
        if (!
$query_id)
        {
            
$query_id $this->query_result;
        }

        return (
$query_id) ? @mysql_num_rows($query_id) : false;
    }

    
/**
    * Free SQL result
    */
    
function sql_freeresult($query_id false)
    {
        if (!
$query_id)
        {
            
$query_id $this->query_result;
        }

        return (
$query_id) ? @mysql_free_result($query_id) : false;
    }

    
/**
    * Get last inserted id after insert statement
    */
    
function sql_nextid()
    {
        return (
$this->db_connect_id) ? @mysql_insert_id($this->db_connect_id) : false;
    }

    
/**
    * Seek to given row number
    * rownum is zero-based
    */
    
function sql_rowseek($rownum$query_id false)
    {
        if (!
$query_id)
        {
            
$query_id $this->query_result;
        }

        if (
$this->query_fromcache && $this->cache_offset 0)
        {
            
$this->cache_offset $rownum;
        }

        return (
$query_id) ? @mysql_data_seek($query_id$rownum) : false;
    }

    
/**
    * Escape string used in sql query
    */
    
function sql_escape($msg)
    {
        if (!
$this->db_connect_id)
        {
            return @
mysql_real_escape_string($msg);
        }

        return @
mysql_real_escape_string($msg$this->db_connect_id);
    }

    
/**
    * Output SQL error message
    */
    
function sql_error($info '')
    {
        die (
'<b>Database error: </b>' . @mysql_error() . (($info) ? ' - ' $info ''));
    }

    
/**
    * Query from database
    */
    
function _sql_query($query '')
    {
        
$query trim($query);

        if (
$query == '')
        {
            return 
false;
        }

        if (
$this->is_master_slave)
        {
            if (
'SELECT' == strtoupper(substr($query06)))
            {
                
// Slave selected.
                
$this->db_connection_id $this->slave_db_connection_id;
            }

            else
            {
                
$this->db_connection_id $this->master_db_connection_id;
            }
        }

        if ((
$this->query_result = @mysql_query($query$this->db_connection_id)) === false)
        {
            
$this->sql_error($query);
        }

        if (
$this->query_result)
        {
            
// No cache controller now.
            
$this->num_queries['normal'] += 1;
        }

        else
        {
            
$this->num_queries['failed'] += 1;
        }

        return (
$this->query_result) ? $this->query_result false;
    }

    
/**
    * Fetch current row
    */
    
function _sql_fetchrow($query_id false$contain_num false)
    {
        if (!
$query_id)
        {
            
$query_id $this->query_result;
        }

        if (
$query_id)
        {
            if (
$contain_num)
            {
                return @
mysql_fetch_array($query_idMYSQL_BOTH);
            }

            else
            {
                return @
mysql_fetch_assoc($query_id);
            }
        }

        return 
false;
    }

    
/**
    * SQL Transaction
    */
    
function _sql_transaction($status 'begin')
    {
        switch (
$status)
        {
            case 
'begin':
                return @
mysql_query('BEGIN'$this->db_connect_id);
            break;

            case 
'commit':
                return @
mysql_query('COMMIT'$this->db_connect_id);
            break;

            case 
'rollback':
                return @
mysql_query('ROLLBACK'$this->db_connect_id);
            break;
        }

        return 
true;
    }

    
/**
    * Close Connection
    */
    
function _sql_close()
    {
        if (
$this->is_master_slave)
        {
            
$this->db_connection_id null;
            @
mysql_close($this->master_db_connection_id);
            @
mysql_close($this->slave_db_connection_id);
            return;
        }

        else
        {
            return @
mysql_close($this->db_connection_id);
        }
    }
}

/**
* Current class name
*/
$classname 'BsmDbMysql';

?>





图片包子,注册送100包子!
2007-9-3 11:52 PM#7
查看资料  访问主页  Blog  发短消息  QQ  ICQ 状态  Yahoo!  顶部
 
奶瓶 (NP博士)
版主
Rank: 7Rank: 7Rank: 7
老仙


UID 52707
精华 4
积分 5560
帖子 6232
金钱 5510 喜悦币
威望 50
人脉 0
阅读权限 100
注册 2004-11-22
来自 北大中文系
状态 离线
[推荐阅读] 找高手解决php控制mysql写入问题
common文件里的db函数(连接初始化)

<?php
/*
* Init dbal
*/
function db($conn_parms$persistency false)
{
    if (
is_string($conn_parms))
    {
        
$tmp = array('normal' => $conn_parms);
        
$conn_parms $tmp;
        unset(
$tmp);
    }

    if (
$conn_parms['normal'])
    {
        
// Single Connection
        
if ($parms parse_conn_parms($conn_parms['normal']))
        {
            
$dbc load_module('db'$parms['dbms']);
            if (
$dbc)
            {
                
$db = new $dbc;
                
$db->sql_connect(
                    
$parms['host'],
                    
$parms['port'],
                    
$parms['user'],
                    
$parms['pass'],
                    
$parms['dbname'],
                    
$persistency
                
);

                return (
$db->db_connection_id) ? $db false;
            }
        }

        return 
false;
    }

    else if (
$conn_parms['master'] && $conn_parms['slave'])
    {
        
// Master/Slave Mode
        
if ($master_parms parse_conn_parms($conn_parms['master']) && $slave_parms parse_conn_parms($conn_parms['slave']))
        {
            if (
$master_parms['dbms'] != $slave_parms['dbms'])
            {
                return 
false;
            }

            
$dbc load_module('db'$master_parms['dbms']);

            if (
$dbc)
            {
                
// Create the db object with M/S mode
                
$db = new $dbc(true);
                
// Connect to master database server
                
$db->sql_connect(
                    
$master_parms['host'],
                    
$master_parms['port'],
                    
$master_parms['user'],
                    
$master_parms['pass'],
                    
$master_parms['dbname'],
                    
$persistency,
                    
true
                
);

                
// Connect to slave database server
                
$db->sql_connect(
                    
$slave_parms['host'],
                    
$slave_parms['port'],
                    
$slave_parms['user'],
                    
$slave_parms['pass'],
                    
$slave_parms['dbname'],
                    
$persistency,
                    
false
                
);
            }

            if (
$db->master_db_connection_id && $db->slave_db_connection_id)
            {
                return 
$db;
            }
        }
    }

    return 
false;
}
?>
看起来相当罗嗦……它使用这样一个函数来接收类似adodb的那种连接字符串:

<?php
/*
* Parse database connection string into parameter array
* A typical connection string looks like "mysql://user:pass@10.0.0.1/database"
*/
function parse_conn_p