- 浏览: 55520 次
- 性别:
- 来自: 天津
最新评论
-
tianjie123:
hibernate search 在db海量数据检索时,因为先 ...
基于Spring的Hibernate Search全文检索功能示例 -
fxsc:
魔力猫咪 写道根据CAP理论,Consistency(一致性) ...
<第一周>key-value数据库集群的发现与思考(兼锻炼坚持能力) -
魔力猫咪:
根据CAP理论,Consistency(一致性), Avail ...
<第一周>key-value数据库集群的发现与思考(兼锻炼坚持能力) -
超级潜水艇:
中文论坛,英文发言,牛B机中的战斗机~
<第一周>key-value数据库集群的发现与思考(兼锻炼坚持能力) -
cbc009:
标记一下,回头接着看。。。
<第一周>key-value数据库集群的发现与思考(兼锻炼坚持能力)
文章列表
/**空闲处理,断开空闲的连接*/
void idle_fds(lua_State *L)
{
client_data *client;
int i;
long n;
n = now();
//做fds和clients对应为了这里快一点(65535 vs 1000)
for(i = 0; i < MAX_CLIENT; i++)
{
client = clients[i];
//超过一定的毫秒数即断开
if(client != NULL && n - client-> ...
/**处理请求数据,调用lua处理*/
void read_fd(int fd, lua_State *L)
{
//已超时移除
if(fds[fd] < 0)
return;
char buf[READ_SIZE];
int ret, idx, done;
client_data *client;
//得到连接信息
idx = fds[fd];
client = clients[idx];
//已读取的字节数
done = client->read_len;
ret = ...
/**断开一个连接,移除epoll监听,通知lua*/
void remove_fd(int fd, lua_State *L)
{
int ret, idx;
lua_State *Lx = lua_newthread(L);
lua_getglobal(Lx, F_ONCLOSE); // 调用lua里的onclose函数
lua_pushinteger(Lx, fd);
ret = lua_pcall(Lx, 1, LUA_MULTRET, 0);
if(ret != 0)
fprintf(stderr, "%s\n", lua_t ...
/**取得当前毫秒数*/
long now()
{
struct timeval t;
gettimeofday(&t, NULL);
return t.tv_sec * 1000 + t.tv_usec / 1000;
}
/**将一个文件描述符添加到epoll监听, common:是否为客户端连接(相对于监听sock)*/
void add_fd(int fd, boolean common)
{
if(common)
{
int idx;
//查找可用的位置(NULL)
for(idx = 0 ...
边学习C语言边写个简单的游戏服务器玩。
--epoll监听读事件
--利用epoll_wait的timeout做idle处理
--数组下标索引客户端连接数据(没找到好用的hashmap库)
--json作为数据交互格式
--luajson luapgsql
/**客户端连接结构体*/
typedef struct client_data
{
int fd;
int read_len;
int data_len;
char read[READ_SIZE];
long last;
} client_data;
int epollfd; //epoll文件描 ...
Postfix + SASL配置要点
- 博客分类:
- linux
1、看一下/etc/default/saslauthd里,一般都会告诉你针对Postfix的OPTIONS配置,改一下;
2、确认smtpd启动时是否chroot,与saslauthd配置相符,在/etc/postfix/master.cf里改一下;
3、如果没有/etc/postfix/sasl/smtpd.conf,建一个,内容如下:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
4、配置postfix验证设置,vi /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes
smtpd_sas ...
没有一种技术可以完美地解决所有问题,有时候折衷一下,会取得更好的效果.
在做技术的时候,我们往往很死心眼,对技术热情越高,这种死心眼越严重.往往一个需求提出来,技术人员便寻找各种解决办法,肝脑涂地也再所不惜.当然,这是一个非常好的做技术的态度,但当我们用尽了各种途径去验证,最后得到的结果是"没有办法达到预期结果"的时候,何不尝试变通的做法,比如跟需求人员讨论小小地改变一下,或者用一种看上去很"垃圾"的设计?
折衷不代表应付,这两个词的出发点就是不同的,不热爱技术的一般靠应付来"完成"任务,而折衷是无可奈何而为之.
经验越丰富,越容 ...
做社区网页游戏开发的,以前粗浅地用过voldemort、cassandra、memcachedb,发现在要求较高的一致性方面,上述几种都不能很好地满足;直到发现Oracle NoSQL Database后,它有一些很好用的特性,比如:
1、同分区的事务保证
2、范围查询
3、各种原子操作方法
经过一番挣扎,决定在新游戏中采用它作为key-value存储,用于处理读写频繁的碎片数据。
在开发过程中有一些个人总结吧:
1、对于需要列表的数据,利用keyrange查询功能对原始数据做索引;
2、切记序列操作中的回滚选项;
3、做好key的管理和文档,不然大量key让后来的维护变得艰难;
4、不 ...
java api里是这样说的
executeUpdate
int executeUpdate() throws SQLException
Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL statement that returns nothing, such as a DDL statement.
Returns:
either (1) the row count for INSERT, U ...
做程序的大部分都有追求完美的心态,大牛们尤其是~
大牛们的回复有时候比较激愤,主要是对现有框架的,不是针对提问者的,所以不用回喷,其实大牛们还是愿意帮助后进生的;
再谈框架,框架并不是不好用,不能用,但我觉得我等要真正了解http、servlet/jsp、jdbc之后再用框架比较好,这样就知道为什么大牛们会喷这些框架了,哈哈
个人觉得做程序的一般什么经历这样的过程:
1、无框架,堆出一个产品来,兴奋不已
2、仅会使用框架,不明白其原理,看着结构化的代码兴奋不已
3、了解原理,改进别人的框架,一边喷着一边兴奋不已
4、搞出个自己的框架,四处炫耀,兴奋不已
5、觉得自己知道的太少了,一边学习一边 ...
高性能的企业应用经验
- 博客分类:
- 程序员的积累
1、数据库性能的提升
再好的代码和数据库设计对性能的提升都是有限的,当然,不是说数据库优化不重要,而且说当数据库优化的成本很高或很难再优化时,加几条几百块钱的内存可能来的更有效。
2、多种存储并存
需要事务性、即时一致性高的数据用SQL数据库存储是最好的选择,对于那些重要性不高的数据,可以选择Key-Value存储;
Key-Value存储的数据对于复杂的查询统计来说很难实现,可以借助数据转化(到SQL)之类的进行离线统计分析。
3、APP服务器很闲
一般来说,只要你不写死循环,APP服务器都会闲的蛋疼,所以有些数据处理工作可以从DB服务器转移到APP上来做,虽然DB上处理可能更方便(用一句 ...
刚发现有这个功能,原来一直在琢磨hibernate怎么实现而且防止并发的,原来是我土了……
//mysql
CREATE TABLE foo(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(16), PRIMARY KEY(id));
//java
String sql = "INSERT INTO foo(name) VALUES(?)"
PreparedStatement st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
st.setStri ...
getColumnName returns the physical name of the column and getColumnLabel returns the *ALIAS*
3、以User为例进行CRU操作
Id.java //Model的父类,为了该死的JSTL我得加上get/set
public abstract class Id<T extends Id<T>> {
@EncDec
public long id;
public long id() {
return id;
}
@SuppressWarnings("unchecked")
public T id(long id_) {
id = id_;
return (T)this;
}
publi ...
2、IOC、AOP及请求处理
ServiceHandler.java//负责处理WAP请求分发和初始化存储
public class ServiceHandler {
//URI缓存
private ConcurrentHashMap<String, ServiceInfo> infos = new ConcurrentHashMap<String, ServiceInfo>(128, 0.8f, 32);
private Container container;
public void init(StoreRepository repository ...