Redian新闻
>
如何快速保存大块数据(工作中遇到的问题)
avatar
如何快速保存大块数据(工作中遇到的问题)# Programming - 葵花宝典
s*e
1
系统运行时,内存中保留大量metadata提供快速检索,系统停止运行时,将内存中的数
据保存到文件中,以便下次系统启动的时候提取。
问题是,如果系统crash的话,或者机器掉电,那么内存中的数据就丢失了, 如果在系
统运行时保存整个metadata, 耗时又太长。所以希望能够实现一个lazy write系统,仅
将修改过的数据写回文件。
请有经验的大侠指教。
avatar
n*e
2
同问,我有类似的问题,不知道怎么解决。

【在 s******e 的大作中提到】
: 系统运行时,内存中保留大量metadata提供快速检索,系统停止运行时,将内存中的数
: 据保存到文件中,以便下次系统启动的时候提取。
: 问题是,如果系统crash的话,或者机器掉电,那么内存中的数据就丢失了, 如果在系
: 统运行时保存整个metadata, 耗时又太长。所以希望能够实现一个lazy write系统,仅
: 将修改过的数据写回文件。
: 请有经验的大侠指教。

avatar
s*e
3
我也没有做过,只是提供思路而已。
1. dirty marker,把数据分成比较好处理的小块,每个小块mark为dirty的写回文件。
2. callback或者observer,随便你怎么叫吧,比如 OnSetAttr(),就把修改过的数据
写回文件。或者后台线程,定时检查,将mark为dirty的写回文件。

【在 s******e 的大作中提到】
: 系统运行时,内存中保留大量metadata提供快速检索,系统停止运行时,将内存中的数
: 据保存到文件中,以便下次系统启动的时候提取。
: 问题是,如果系统crash的话,或者机器掉电,那么内存中的数据就丢失了, 如果在系
: 统运行时保存整个metadata, 耗时又太长。所以希望能够实现一个lazy write系统,仅
: 将修改过的数据写回文件。
: 请有经验的大侠指教。

avatar
m*t
4

mmap is your friend.

【在 s******e 的大作中提到】
: 系统运行时,内存中保留大量metadata提供快速检索,系统停止运行时,将内存中的数
: 据保存到文件中,以便下次系统启动的时候提取。
: 问题是,如果系统crash的话,或者机器掉电,那么内存中的数据就丢失了, 如果在系
: 统运行时保存整个metadata, 耗时又太长。所以希望能够实现一个lazy write系统,仅
: 将修改过的数据写回文件。
: 请有经验的大侠指教。

avatar
f*Q
5
多线程不行么?
avatar
g*g
6
Well, I think you should get an UPS instead. That's probably
a cheaper solution than rewrite the code.

【在 s******e 的大作中提到】
: 系统运行时,内存中保留大量metadata提供快速检索,系统停止运行时,将内存中的数
: 据保存到文件中,以便下次系统启动的时候提取。
: 问题是,如果系统crash的话,或者机器掉电,那么内存中的数据就丢失了, 如果在系
: 统运行时保存整个metadata, 耗时又太长。所以希望能够实现一个lazy write系统,仅
: 将修改过的数据写回文件。
: 请有经验的大侠指教。

avatar
w*g
7
如果你用C++的话,POST++是一个不错的东东。可以用来创建基于mmap的persistent ob
ject,还有transaction功能。

【在 s******e 的大作中提到】
: 系统运行时,内存中保留大量metadata提供快速检索,系统停止运行时,将内存中的数
: 据保存到文件中,以便下次系统启动的时候提取。
: 问题是,如果系统crash的话,或者机器掉电,那么内存中的数据就丢失了, 如果在系
: 统运行时保存整个metadata, 耗时又太长。所以希望能够实现一个lazy write系统,仅
: 将修改过的数据写回文件。
: 请有经验的大侠指教。

avatar
s*e
8
谢谢各位。
我也考虑过使用类似mmap的技术,问题是metadata项大小不一致,数据进行了多次添加
删除后可能会浪费大量的空间。需要实现像heap allocation一样比较复杂的空间分配
和回收工作。不知道有没有更简单一点的处理这样问题的方法?
avatar
s*e
9
谢谢, 看起来post++就是我想要的。看起来我关注的几个问题,全都解决的。

ob

【在 w***g 的大作中提到】
: 如果你用C++的话,POST++是一个不错的东东。可以用来创建基于mmap的persistent ob
: ject,还有transaction功能。

avatar
c*a
10
在内存和缓冲间加FLASH
avatar
r*t
11
I have a similar question, but my problem is that I need write to this block
of data from a Ruby frontend, and backend need to read this block of data,
any good sugestion?
thanks
avatar
r*t
12
I have a similar question, but my problem is that I need write to this block
of data from a Ruby frontend, and backend need to read this block of data,
any good sugestion?
thanks
avatar
s*e
13
Are you using File as the inter media between front end and back end? Or you
need serialize the data to file from backend? For this case, you can also
use post++ if your backend is c++. I am not sure if we are concerned about
the same thing.

block
,

【在 r***t 的大作中提到】
: I have a similar question, but my problem is that I need write to this block
: of data from a Ruby frontend, and backend need to read this block of data,
: any good sugestion?
: thanks

avatar
r*t
14
no, the backend is another server, currently using Amazon SDB to pass the
data from the front end, but it is too slow. so want to find something
faster and more reliable
avatar
a*l
15
oh, man! You are trying to murder the flash.

【在 c******a 的大作中提到】
: 在内存和缓冲间加FLASH
avatar
s*e
16
Well, I think that will be different problem. I think we don't care about
persistence. You just want to find something speed up data transfer. Maybe
consider using something like multithreading, or use different protocol.

【在 r***t 的大作中提到】
: no, the backend is another server, currently using Amazon SDB to pass the
: data from the front end, but it is too slow. so want to find something
: faster and more reliable

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。