g***3 发帖数: 2304 | 1 最近才开始来programming版,发现高手好多啊,就来请教个工作中遇到的问题。
在程序中,需要频繁开容器来存储从db拿回来的东西,然后做filtering and sorting
,所以请求数据大了之后,会频繁触发gc,导致整个process 锁住,程序性能下降。
数据量比较大,每次从db拿回来的数据可能在几个G~20G的样子。现在的workaround是
distribute query到leaf nod上,但是distribute之后,可靠性又下降了。
请问怎么解? |
s********r 发帖数: 394 | 2 难道不能从数据库直接取到filter sort过的数据?这样直接分页拿回就行了
sorting
★ 发自iPhone App: ChineseWeb 8.7
【在 g***3 的大作中提到】 : 最近才开始来programming版,发现高手好多啊,就来请教个工作中遇到的问题。 : 在程序中,需要频繁开容器来存储从db拿回来的东西,然后做filtering and sorting : ,所以请求数据大了之后,会频繁触发gc,导致整个process 锁住,程序性能下降。 : 数据量比较大,每次从db拿回来的数据可能在几个G~20G的样子。现在的workaround是 : distribute query到leaf nod上,但是distribute之后,可靠性又下降了。 : 请问怎么解?
|
d******e 发帖数: 2265 | 3 你需要lazy.
具体说做个data processing pipeline,
数据端坐一个data stream.
then filter sort save.
最近刚坐个了这么个东西。
sorting
【在 g***3 的大作中提到】 : 最近才开始来programming版,发现高手好多啊,就来请教个工作中遇到的问题。 : 在程序中,需要频繁开容器来存储从db拿回来的东西,然后做filtering and sorting : ,所以请求数据大了之后,会频繁触发gc,导致整个process 锁住,程序性能下降。 : 数据量比较大,每次从db拿回来的数据可能在几个G~20G的样子。现在的workaround是 : distribute query到leaf nod上,但是distribute之后,可靠性又下降了。 : 请问怎么解?
|
g***3 发帖数: 2304 | 4 sorry, cannot type Chinese with my laptop.
Have to sort and filter across db partitions
【在 s********r 的大作中提到】 : 难道不能从数据库直接取到filter sort过的数据?这样直接分页拿回就行了 : : sorting : ★ 发自iPhone App: ChineseWeb 8.7
|
g***3 发帖数: 2304 | 5 not sure what do you mean "lazy".
Do you mean don't get all the data, just get as many as we need?
can you talk the details?
Thx.
【在 d******e 的大作中提到】 : 你需要lazy. : 具体说做个data processing pipeline, : 数据端坐一个data stream. : then filter sort save. : 最近刚坐个了这么个东西。 : : sorting
|
p**r 发帖数: 5853 | 6 #1
lazy vs eager,基本就是你理解的意思,
和上面几个高手说page之类的一个意思
比如你现在拿100个page的数据,
可以改成先拿10个page的数据,然后对这个10个数据做处理的同时,
再拿下面20个数据,抓数据用异步,不影响你目前处理数据。
#2
如果你非要一下把数据全拿来,
那我个人觉得架构设计上可能有缺陷,可以考虑改一下架构,
类似上面database大神说的pipe/filter
#3
如果架构上你没法动,或者其他组的问题,
你可以干脆在你这步做一个NOSQL CACHE层,
可以丢进AWS ES做,或者本地用lucene做,
【在 g***3 的大作中提到】 : not sure what do you mean "lazy". : Do you mean don't get all the data, just get as many as we need? : can you talk the details? : Thx.
|
N********n 发帖数: 8363 | 7
sorting
If all you do is filter/sort, you could distribute the work load
onto different nodes with each one holding a subset of data. Let
each node F/S the subset and then merge the sorted results from
them. Merging sorted lists are reasonably fast.
【在 g***3 的大作中提到】 : 最近才开始来programming版,发现高手好多啊,就来请教个工作中遇到的问题。 : 在程序中,需要频繁开容器来存储从db拿回来的东西,然后做filtering and sorting : ,所以请求数据大了之后,会频繁触发gc,导致整个process 锁住,程序性能下降。 : 数据量比较大,每次从db拿回来的数据可能在几个G~20G的样子。现在的workaround是 : distribute query到leaf nod上,但是distribute之后,可靠性又下降了。 : 请问怎么解?
|
g***3 发帖数: 2304 | 8 多谢pker大牛,现在的问题是数据源是两个不同的db,需要两个source 一起做filter/
sort,所以必须全拿出来,sort好了之后,是page后的往UI送。
【在 p**r 的大作中提到】 : #1 : lazy vs eager,基本就是你理解的意思, : 和上面几个高手说page之类的一个意思 : 比如你现在拿100个page的数据, : 可以改成先拿10个page的数据,然后对这个10个数据做处理的同时, : 再拿下面20个数据,抓数据用异步,不影响你目前处理数据。 : #2 : 如果你非要一下把数据全拿来, : 那我个人觉得架构设计上可能有缺陷,可以考虑改一下架构, : 类似上面database大神说的pipe/filter
|
g***3 发帖数: 2304 | 9 that's exactly what we are doing.
The problem of distributed query is the reliability. Once some nodes become
bad status, lots of query are affected.
【在 N********n 的大作中提到】 : : sorting : If all you do is filter/sort, you could distribute the work load : onto different nodes with each one holding a subset of data. Let : each node F/S the subset and then merge the sorted results from : them. Merging sorted lists are reasonably fast.
|