该帖已经被评为良好帖
|
||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-05-17
alin_ass 写道 不是很喜欢memcache java client这种搞个连接池,每次发送的时候拿到一个连接,发送后阻塞在那里等回应,一般remote cache如果每次请求带个id的话,是可以在client端用一个链接做异步的,也就是request pool而不是connection pool
connection pool 的确是方便了编程,有点像服务器端的 OneThreadPerConnection 的编程风格。 如果转为 request pool ,就相当于是 event-driven 的编程风格了。这种 event-driven 风格的 api 对于使用者来说会带来比较大的困难,会增加客户端的编程难度。如果这个客户端是一个需求改变比较频繁,代码修改比较频繁的模块,那么这些增加的编程难度将带来很大的障碍。 另外对于 http 这种 request/response 方式的应用来说,在服务器端处理请求的时候,即使使用 request pool ,用异步方式来访问 memcached ,还是一样要在处理请求的 action 里等待这个异步操作的完成,相当于还是同步阻塞的,和 connection pool 没很大区别。如果客户端是一个批处理模式的应用,那么使用异步处理方式会快很多。 引用 这个帖子里的朋友有兴趣去写一个request pool而不是connection pool的mem client么?
或者谁能证明n个链接发数据和1个链接在数据吞吐量上有什么差别, connection pool只是为了编程上方便的做法 要实现 request pool 的 memclient,需要 memcached 服务器的支持。目前的 memcached 的协议并不支持。 因为要实现 request pool 的方式,这个 RequestID 是服务器必须要知道。memcached 的协议并不支持传递 RequetID 或者产生 RequestID。 服务器必须要知道 RequestID,是因为服务器必须要在 Response 中加上这个 RequestID ,这样客户端才能把 response 和 request 对应起来。RequestID 可以由客户端生成,传递给服务器,也可以由服务器在收到请求之后,产生一个 RequestID ,客户端每次发送请求之后,同步读这个 RequestID 。通常如果请求的处理时间比较长,可以考虑由服务器来产生,否则读取服务器产生的 RequestID 的消耗可能已经超过读取本来的 Response 了。 |
||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-05-31
timelyRain 写道: 我的项目原来使用静态HashMap来实现Key->Object的缓存,并且实现脏数据刷新.由于项目要改成集群部署.在单个jvm里运行的静态Hash结构已经无法处理脏数据问题.所以准备使用memcached做分布式缓存来解决. 从网上搜索到的资料来看 memcached能够接受较大量的请求.但其javaclient 由于大量使用同步语句、hashmap,读取流没有使用bufferedStream。造成性能并不好 测试环境1: 测试方法
测试环境2: 相同的测试方法。测试结果大跌眼睛 10线程时 读写速度为200ms/per object 比我的笔记本慢100倍。就没继续测试 测试环境3:
我的期望是读写速度均能稳定在0.1毫秒左右,至少 1w obj/s 这样才有可能不影响到现有系统的效率 下面贴下我的client的实现 主要是socket初次打开后不关闭,直接存放到ThreadLocal中,与memcached保持一个长练接。每次使用的时候判断连接可用还是需要重新连接。 java 代码
MemBufferedDriver 为client实现
java 代码
读取的测试方法
|
||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-09-01
codeutil 写道 昨天听同学说他的memecache用的是12G内存.存储大约1000万个键值对,查询速度很快. |
||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||