p*i
2 楼
问题简化下是这样:
有一个hash表, key 由两部分组成: K1 and K2
query hash表的时候希望可以满足以下要求:
1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
3 query by K1+K2, 正常。
现在的实现是用
ConcurrentHashMap(K1, concurrentHashMap(K2, object))
想在这个基础上再优化, 提高efficiency
请各位高手指点
网上搜到 multikeymap
不知道有人用过吗? 能有效解决我的问题吗?
谢谢!
有一个hash表, key 由两部分组成: K1 and K2
query hash表的时候希望可以满足以下要求:
1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
3 query by K1+K2, 正常。
现在的实现是用
ConcurrentHashMap(K1, concurrentHashMap(K2, object))
想在这个基础上再优化, 提高efficiency
请各位高手指点
网上搜到 multikeymap
不知道有人用过吗? 能有效解决我的问题吗?
谢谢!
A*2
3 楼
竹枝
t*a
4 楼
也别大改了,就再建个ConcurrentHashMap> 来提高2号
query的效率。和你原来的map一起用,就当是维护俩索引
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
query的效率。和你原来的map一起用,就当是维护俩索引
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
p*a
5 楼
不错,背景稍显脏,欠变化
J*n
6 楼
K1, K2保证存在,且都是unique吗?
d*w
9 楼
画得挺有意思的,不觉得脏啊
g*g
12 楼
这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
三个index
>, >, , V>
算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
实现。
如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
三个index
算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
实现。
如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
t*a
14 楼
对,其实就是index的思路,如果想省一点,可以只做两个index
k1,k2 combine一个,k2再做一个
如果只query k1, 一样可以用那个combine的index做index search
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:>, >, , V>
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
k1,k2 combine一个,k2再做一个
如果只query k1, 一样可以用那个combine的index做index search
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
f*g
15 楼
喜欢这种简洁风的!
ps,第一个瓶子,如果是圆的,底部的椭圆两端好像应该再圆一些。
ps,第一个瓶子,如果是圆的,底部的椭圆两端好像应该再圆一些。
p*i
16 楼
我目前的思路也是这样
但觉得不是特别好
要求我的维护三个maps
这个hashtable同时非常同态
增加删除的频率很高
维护开销会比较大
还有更好的方法吗?
btw 你用过multikeymap吗?
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:>, >, , V>
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
但觉得不是特别好
要求我的维护三个maps
这个hashtable同时非常同态
增加删除的频率很高
维护开销会比较大
还有更好的方法吗?
btw 你用过multikeymap吗?
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
g*g
18 楼
你要深度优化,就得说明你的数据量大小,读写的频度,读写latency分别的要求。既
然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
半不是你想要的。
【在 p****i 的大作中提到】
: 我目前的思路也是这样
: 但觉得不是特别好
: 要求我的维护三个maps
: 这个hashtable同时非常同态
: 增加删除的频率很高
: 维护开销会比较大
: 还有更好的方法吗?
: btw 你用过multikeymap吗?
然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
半不是你想要的。
【在 p****i 的大作中提到】
: 我目前的思路也是这样
: 但觉得不是特别好
: 要求我的维护三个maps
: 这个hashtable同时非常同态
: 增加删除的频率很高
: 维护开销会比较大
: 还有更好的方法吗?
: btw 你用过multikeymap吗?
p*i
20 楼
thanks
数据量并没有太大, 2Million records, 总共大约500Mbytes,
现在追求的是micro-second级别的性能优化
题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
production级别的性能。
现在也在想replace呢
【在 g*****g 的大作中提到】
: 你要深度优化,就得说明你的数据量大小,读写的频度,读写latency分别的要求。既
: 然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
: ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
: ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
: 维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
: 如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
: 如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
: 读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
: 我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
: 半不是你想要的。
数据量并没有太大, 2Million records, 总共大约500Mbytes,
现在追求的是micro-second级别的性能优化
题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
production级别的性能。
现在也在想replace呢
【在 g*****g 的大作中提到】
: 你要深度优化,就得说明你的数据量大小,读写的频度,读写latency分别的要求。既
: 然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
: ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
: ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
: 维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
: 如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
: 如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
: 读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
: 我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
: 半不是你想要的。
g*g
21 楼
这个级别没啥好折腾的,就像我说的调一下ConcurrentHashmap和hashcode足以。你先
写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
是瓶颈。
Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
都有讲究。
Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
多半用了。
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
是瓶颈。
Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
都有讲究。
Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
多半用了。
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
p*i
22 楼
你说的1ms 是millisecond级别的吧
这个级别对我们这个应用来说太corse了
hashcode sounds like a potential way, let me check.
CPU
level
【在 g*****g 的大作中提到】
: 这个级别没啥好折腾的,就像我说的调一下ConcurrentHashmap和hashcode足以。你先
: 写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
: 是瓶颈。
: Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
: 都有讲究。
: Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
: 多半用了。
这个级别对我们这个应用来说太corse了
hashcode sounds like a potential way, let me check.
CPU
level
【在 g*****g 的大作中提到】
: 这个级别没啥好折腾的,就像我说的调一下ConcurrentHashmap和hashcode足以。你先
: 写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
: 是瓶颈。
: Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
: 都有讲究。
: Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
: 多半用了。
g*g
23 楼
如果你要追求Microsecond的latency,你需要的就不只是算法了。需要的是整个stack
,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
多半超时。或者就不该选择Java。
Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
过。Real time不是我熟悉的范畴。
【在 p****i 的大作中提到】
: 你说的1ms 是millisecond级别的吧
: 这个级别对我们这个应用来说太corse了
: hashcode sounds like a potential way, let me check.
:
: CPU
: level
,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
多半超时。或者就不该选择Java。
Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
过。Real time不是我熟悉的范畴。
【在 p****i 的大作中提到】
: 你说的1ms 是millisecond级别的吧
: 这个级别对我们这个应用来说太corse了
: hashcode sounds like a potential way, let me check.
:
: CPU
: level
J*n
24 楼
看过一些文章,说Java搞Real time确实不是个好的选择
w*z
25 楼
+1, 昨天晚上一个Cassandra node 差点oom, trigger full gc, (cms failed mode
), 竟然40秒pause.
stack
GC
【在 g*****g 的大作中提到】
: 如果你要追求Microsecond的latency,你需要的就不只是算法了。需要的是整个stack
: ,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
: 多半超时。或者就不该选择Java。
: Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
: 过。Real time不是我熟悉的范畴。
), 竟然40秒pause.
stack
GC
【在 g*****g 的大作中提到】
: 如果你要追求Microsecond的latency,你需要的就不只是算法了。需要的是整个stack
: ,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
: 多半超时。或者就不该选择Java。
: Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
: 过。Real time不是我熟悉的范畴。
w*z
26 楼
Cassandra read latency is in millionseconds unless you use row cache. write
latency is in microseconds .
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
latency is in microseconds .
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
p*i
35 楼
问题简化下是这样:
有一个hash表, key 由两部分组成: K1 and K2
query hash表的时候希望可以满足以下要求:
1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
3 query by K1+K2, 正常。
现在的实现是用
ConcurrentHashMap(K1, concurrentHashMap(K2, object))
想在这个基础上再优化, 提高efficiency
请各位高手指点
网上搜到 multikeymap
不知道有人用过吗? 能有效解决我的问题吗?
谢谢!
有一个hash表, key 由两部分组成: K1 and K2
query hash表的时候希望可以满足以下要求:
1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
3 query by K1+K2, 正常。
现在的实现是用
ConcurrentHashMap(K1, concurrentHashMap(K2, object))
想在这个基础上再优化, 提高efficiency
请各位高手指点
网上搜到 multikeymap
不知道有人用过吗? 能有效解决我的问题吗?
谢谢!
t*a
36 楼
也别大改了,就再建个ConcurrentHashMap> 来提高2号
query的效率。和你原来的map一起用,就当是维护俩索引
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
query的效率。和你原来的map一起用,就当是维护俩索引
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
J*n
37 楼
K1, K2保证存在,且都是unique吗?
g*g
40 楼
这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
三个index
>, >, , V>
算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
实现。
如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
三个index
算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
实现。
如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
【在 p****i 的大作中提到】
: 问题简化下是这样:
: 有一个hash表, key 由两部分组成: K1 and K2
: query hash表的时候希望可以满足以下要求:
: 1 query by K1=V1 only, 返回所有K1=V1的records K2 不计
: 2 query by K2=V2 only, 返回所有K2=V2的records, K1 不计
: 3 query by K1+K2, 正常。
: 现在的实现是用
: ConcurrentHashMap(K1, concurrentHashMap(K2, object))
: 想在这个基础上再优化, 提高efficiency
: 请各位高手指点
t*a
41 楼
对,其实就是index的思路,如果想省一点,可以只做两个index
k1,k2 combine一个,k2再做一个
如果只query k1, 一样可以用那个combine的index做index search
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:>, >, , V>
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
k1,k2 combine一个,k2再做一个
如果只query k1, 一样可以用那个combine的index做index search
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
p*i
42 楼
我目前的思路也是这样
但觉得不是特别好
要求我的维护三个maps
这个hashtable同时非常同态
增加删除的频率很高
维护开销会比较大
还有更好的方法吗?
btw 你用过multikeymap吗?
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:>, >, , V>
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
但觉得不是特别好
要求我的维护三个maps
这个hashtable同时非常同态
增加删除的频率很高
维护开销会比较大
还有更好的方法吗?
btw 你用过multikeymap吗?
【在 g*****g 的大作中提到】
: 这个其实就相当个DB query。对两个key分别做index是基本的做法。你也可以简单的做
: 三个index
:
: 算法上都是O(1)的实现。实际上追求效率的话,区别一个在于最初建立
: ConcurrentHashMap的原始大小,你希望resize越少越好,另一个在于Key hashcode的
: 实现。
: 如果你的数据量大到内存放不下,Distributed Cache,DB都是可以考虑的选择。
g*g
43 楼
你要深度优化,就得说明你的数据量大小,读写的频度,读写latency分别的要求。既
然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
半不是你想要的。
【在 p****i 的大作中提到】
: 我目前的思路也是这样
: 但觉得不是特别好
: 要求我的维护三个maps
: 这个hashtable同时非常同态
: 增加删除的频率很高
: 维护开销会比较大
: 还有更好的方法吗?
: btw 你用过multikeymap吗?
然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
半不是你想要的。
【在 p****i 的大作中提到】
: 我目前的思路也是这样
: 但觉得不是特别好
: 要求我的维护三个maps
: 这个hashtable同时非常同态
: 增加删除的频率很高
: 维护开销会比较大
: 还有更好的方法吗?
: btw 你用过multikeymap吗?
p*i
44 楼
thanks
数据量并没有太大, 2Million records, 总共大约500Mbytes,
现在追求的是micro-second级别的性能优化
题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
production级别的性能。
现在也在想replace呢
【在 g*****g 的大作中提到】
: 你要深度优化,就得说明你的数据量大小,读写的频度,读写latency分别的要求。既
: 然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
: ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
: ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
: 维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
: 如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
: 如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
: 读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
: 我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
: 半不是你想要的。
数据量并没有太大, 2Million records, 总共大约500Mbytes,
现在追求的是micro-second级别的性能优化
题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
production级别的性能。
现在也在想replace呢
【在 g*****g 的大作中提到】
: 你要深度优化,就得说明你的数据量大小,读写的频度,读写latency分别的要求。既
: 然你在考虑ConcurrentHashMap,我猜想数据量并不算太大,单机能放得下。经验上
: ConcurrentHashMap足够了。你需要的是个benchmark test,然后调试一下
: ConcurrentHashMap constructor上那三个不同参数,以及hashcode的算法。虽然你要
: 维护3个map,但性能瓶颈不会在这里,你甚至可以起3个线程同时进行3个map的维护。
: 如果并行读写很频繁,你多半会发现瓶颈在CPU上。如果不够快,你需要一个cluster。
: 如果数据量太大,你需要的是像Cassandra的DB。即便到Pegabytes数据量,每秒一万次
: 读写的级别,也可以把读写控制在几个ms,Twitter就是那么做的。
: 我不知道你说得是哪个MultiKeyMap的实现,Apache Commons的那个不thread safe。多
: 半不是你想要的。
g*g
45 楼
这个级别没啥好折腾的,就像我说的调一下ConcurrentHashmap和hashcode足以。你先
写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
是瓶颈。
Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
都有讲究。
Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
多半用了。
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
是瓶颈。
Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
都有讲究。
Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
多半用了。
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
p*i
46 楼
你说的1ms 是millisecond级别的吧
这个级别对我们这个应用来说太corse了
hashcode sounds like a potential way, let me check.
CPU
level
【在 g*****g 的大作中提到】
: 这个级别没啥好折腾的,就像我说的调一下ConcurrentHashmap和hashcode足以。你先
: 写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
: 是瓶颈。
: Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
: 都有讲究。
: Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
: 多半用了。
这个级别对我们这个应用来说太corse了
hashcode sounds like a potential way, let me check.
CPU
level
【在 g*****g 的大作中提到】
: 这个级别没啥好折腾的,就像我说的调一下ConcurrentHashmap和hashcode足以。你先
: 写个测试测一下,再考虑是否需要进一步优化。我的预测是平均每个操作低于1ms,CPU
: 是瓶颈。
: Cassandra性能很好,关键是你们会不会用。replication factor, consistency level
: 都有讲究。
: Indexing也很有讲究,比如secondary index, Row range query会导致性能问题,你们
: 多半用了。
g*g
47 楼
如果你要追求Microsecond的latency,你需要的就不只是算法了。需要的是整个stack
,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
多半超时。或者就不该选择Java。
Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
过。Real time不是我熟悉的范畴。
【在 p****i 的大作中提到】
: 你说的1ms 是millisecond级别的吧
: 这个级别对我们这个应用来说太corse了
: hashcode sounds like a potential way, let me check.
:
: CPU
: level
,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
多半超时。或者就不该选择Java。
Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
过。Real time不是我熟悉的范畴。
【在 p****i 的大作中提到】
: 你说的1ms 是millisecond级别的吧
: 这个级别对我们这个应用来说太corse了
: hashcode sounds like a potential way, let me check.
:
: CPU
: level
J*n
48 楼
看过一些文章,说Java搞Real time确实不是个好的选择
w*z
49 楼
+1, 昨天晚上一个Cassandra node 差点oom, trigger full gc, (cms failed mode
), 竟然40秒pause.
stack
GC
【在 g*****g 的大作中提到】
: 如果你要追求Microsecond的latency,你需要的就不只是算法了。需要的是整个stack
: ,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
: 多半超时。或者就不该选择Java。
: Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
: 过。Real time不是我熟悉的范畴。
), 竟然40秒pause.
stack
GC
【在 g*****g 的大作中提到】
: 如果你要追求Microsecond的latency,你需要的就不只是算法了。需要的是整个stack
: ,从硬件到OS的调优。Oracle的JVM也不合适,你需要realtime JVM,否则一个full GC
: 多半超时。或者就不该选择Java。
: Major stock exchange的latency也要几百纳秒,通常纯C/C++写得,软硬件网络都优化
: 过。Real time不是我熟悉的范畴。
w*z
50 楼
Cassandra read latency is in millionseconds unless you use row cache. write
latency is in microseconds .
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
latency is in microseconds .
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
m*r
60 楼
for what i understand what you are working on, cassandra is obviously not a
good choice. my feeling is, the kind of performance you need cannot be
achieved by depending on another service over the network.
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
good choice. my feeling is, the kind of performance you need cannot be
achieved by depending on another service over the network.
【在 p****i 的大作中提到】
: thanks
: 数据量并没有太大, 2Million records, 总共大约500Mbytes,
: 现在追求的是micro-second级别的性能优化
: 题外话: 我们另一个应用用的就是cluster based cassandra, 我觉得性能很差啊,
: 不同node之间的synchronize非常耗时, 而且状态很不稳定。可以用但是远达不到
: production级别的性能。
: 现在也在想replace呢
相关阅读
JAX-RPC 是否支持MTOM这样会如何?请问一下about builder pattern问一个Java题Is there shortcut key for expand all in search view for ecl问个设计问题写文件受限的问题看到一个让我~!@#$%^&*的codeA Servlet query string questionjunit test问题问个Spring Framework的数据库设置的问题学struts对学hibernate, spring有触类旁通的作用吗?怎么把其他form加到richtext box( FCKeditor)?问一个Java regexp的题Maven questionthread safe Singleton 的几种方法?问个HttpClient 的问题IntelliJ IDEA 9.0 is released, and with free community editeclipse 做gui问题