老大,求救开源中国的底层支持多大的并发数??

hnuweiwei 发布于 2011/08/15 22:42
阅读 1K+
收藏 4
开源中国的底层是dbutil,支持多大的并发访问量?
加载中
0
红薯
红薯

一个Web系统的性能,肯定跟连接池组件和持久层组件的性能毫无关系!就算不同的组件之间性能有所区别,但都是微乎其微。请看我之前写的一个帖子:

http://www.oschina.net/question/12_8639

0
loyal
loyal
和dbutils没关系吧?和数据库有关系.
0
hnuweiwei
hnuweiwei
和数据库的设计有关系还是如何操作数据库有关系? 如何支持高的并发数呢? j2ee方面的。
0
红薯
红薯

支持的并发数,这是一个系统工程,跟任何一部分都有关系,但对于一个web应用来说,更多在于数据库系统和缓存上。

首先利用缓存来降低数据库的访问,然后在数据库的设计和SQL语句的编写上尽量优化,尽量用索引之类的,这个问题挺大的!

0
hnuweiwei
hnuweiwei

哎。我们是做一个综合测评系统,学生登陆的时间比较长,而且一年只登陆一两次。 

#连接设置
driverClassName = com.mysql.jdbc.Driver
url =jdbc\:mysql\://localhost\:3308/careerplan
username = root
password = weiwei
connectionProperties = useUnicode=true; characterEncoding=utf-8

#初始化连接
initialSize = 10

#最大连接数量
maxActive = 50

#最大空闲连接
maxIdle = 20

#最小空闲连接
minIdle = 10

#超时等待时间
maxWait = 10000

这个是我们数据库连接池的配置,不知道可以支持多少并发数的
用的是dbutil的底层,


package com.dbmanager;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
 *
 * dbcp 实用类,提供了dbcp连接,不允许继承;
 * 
 * 该类需要有个地方来初始化 DS ,通过调用initDS 方法来完成,可以在通过调用带参数的构造函数完成调用,可以在其它类中调用,也可以在本类中加一个static{}来完成;
 */
public final class DbcpBean {
/** 数据源,static */
private static DataSource DS;
/** 从数据源获得一个连接 */
public Connection getConnection() {
try {
return DS.getConnection();
} catch (SQLException e) {
System.out.println("获得连接出错!");
e.printStackTrace();
return null;
}
}
public DataSource getDataSource() {
return DS;
}
/** 默认的构造函数 */
public DbcpBean() {
try {
initDS("dbcpconfig.properties");            //载入外部配置文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/** 构造函数,初始化了 DS ,指定配置文件 */
public DbcpBean(String propertyURL) {
try {
initDS(propertyURL);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/** 构造函数,初始化了 DS ,指定 所有参数 */
public DbcpBean(String connectURI, String username, String pswd, String driverClass, int initialSize,
int maxActive, int maxIdle, int maxWait) {
initDS(connectURI, username, pswd, driverClass, initialSize, maxActive, maxIdle, maxWait);
}
/**
* 创建数据源,使用指定的配置文件;
* 
*/
public static void initDS(String propertyURL) throws IOException {
Properties properties = new Properties();
InputStream is = DbcpBean.class.getClassLoader().getResourceAsStream(propertyURL);
properties.load(is);
try {
DS = BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/** 
* 指定所有参数连接数据源
* 
* @param connectURI 数据库
* @param username 用户名
* @param pswd 密码
* @param driverClass 数据库连接驱动名
* @param initialSize 初始连接池连接个数
* @param maxActive 最大激活连接数
* @param maxIdle 最大闲置连接数
* @param maxWait 获得连接的最大等待毫秒数
* @return
*/
public static void initDS(String connectURI, String username, String pswd, String driverClass, int initialSize,
int maxActive, int maxIdle, int maxWait) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driverClass);
ds.setUsername(username);
ds.setPassword(pswd);
ds.setUrl(connectURI);
ds.setInitialSize(initialSize); // 初始的连接数;
ds.setMaxActive(maxActive);
ds.setMaxIdle(maxIdle);
ds.setMaxWait(maxWait);
DS = ds;
}
/** 获得数据源连接状态 */
public static Map<String, Integer> getDataSourceStats() throws SQLException {
BasicDataSource bds = (BasicDataSource) DS;
Map<String, Integer> map = new HashMap<String, Integer>(2);
map.put("active_number", bds.getNumActive());
map.put("idle_number", bds.getNumIdle());
return map;
}
/** 关闭数据源 */
protected static void shutdownDataSource() throws SQLException {
BasicDataSource bds = (BasicDataSource) DS;
bds.close();
}
}

0
hnuweiwei
hnuweiwei
多谢红薯大哥和loyal大哥。
0
huzorro
huzorro
能支持多大的并发, 关键还是在于单个线程的阻塞时间
0
核桃博客
核桃博客
re,而且开始没必要太多考虑性能;
性能方面注意使用连接池,及时关闭连接,sql优化避免全表扫描,按需取数据,使用简单cache; 基本就可以了;

后面量上来了再优化。

返回顶部
顶部