- 主题:各位大佬,有可以动态扩展的mmap库不?
这样一种场景:实时数据流希望把所有数据都存下来,总数据量未知可能有几G,也可能有几十上百G;C++中有没有好用的方便读写mmap库能动态扩展(如多个文件每个文件固定大小),找了一圈好像没有。
就是一个进程通过这个mmap库实时存储未知大小的数据, 另一个进程(也可能多个进程)通过mmap实时读取这个数据。
--
FROM 111.199.185.*
用数据库不香么?有延时要求?
--
FROM 115.193.176.*
是的,低延时
【 在 ziqin 的大作中提到: 】
: 用数据库不香么?有延时要求?
--
FROM 111.199.185.*
要求多低的延时?
【 在 cat201702 的大作中提到: 】
: 是的,低延时
--
FROM 115.193.176.*
之前版上有人提到过一个和汽车自动驾驶有关的开源库,有共享内存封装,但我忘了名字了
--
FROM 114.254.115.*
随便一个得内存数据库就可以了。
就算sqlite的内存模式都行
【 在 cat201702 的大作中提到: 】
: 这样一种场景:实时数据流希望把所有数据都存下来,总数据量未知可能有几G,也可能有几十上百G;C++中有没有好用的方便读写mmap库能动态扩展(如多个文件每个文件固定大小),找了一圈好像没有。
: 就是一个进程通过这个mmap库实时存储未知大小的数据, 另一个进程(也可能多个进程)通过mmap实时读取这个数据。
: --
: ...................
--来自微微水木3.5.17
--
FROM 58.246.152.*
他要跨进程共享,共享内存大小还要可扩张,甚至还很大,得需要memory mapped file
用boost::IPC自己轮一个类似跨multiple memory mapped filed的dequeue就是了,就是数据结构麻烦一些
sqlite的内存数据库模式好像是不能跨进程的。create sqlite connection的时候没法指定在private memory 还是在 shared memory
【 在 foliver 的大作中提到: 】
: 随便一个得内存数据库就可以了。
: 就算sqlite的内存模式都行
:
--
修改:ziqin FROM 115.193.176.*
FROM 115.193.176.*
【 在 z16166 的大作中提到: 】
: 之前版上有人提到过一个和汽车自动驾驶有关的开源库,有共享内存封装,但我忘了名字了
iceoryx
--
FROM 171.213.218.*
我最近也碰到类似的应用场景。选的是 lmdb. 它是基于 mmap 的 kv 数据库。
我弄的 qtng 提供了一个类似于 std::map<> 的包装。
//github/hgoldfish/qtnetworkng/blob/master/include/lmdb.h#L107
auto lmdb = Lmdb::Builder(dbPath).create();
auto trans = lmdb->toWrite();
auto db = trans->db("test");
db.insert(...);
db.remove(...);
db.value(...);
for (db::iterator itor = db.begin(); itor != db.end(); ++itor) {
cout << itor.key() << itor.value() << endl;
}
跟操作内存中的 map<> 没太大区别。有两种配置 writeMap(true) 和 writeMap(false) 前者所有写入直接写到 mmap 内存里面,但映射文件会被固定到某个大小。而后者先写到内存,等 sync() 的时候才合并到 mmap 内存里面,所以映射文件不会特别大。前者还可以配置 noSync(true),此时,写入到 mmap 内存后,会在后台慢慢刷到磁盘。这个写速度暴快。
但注意,lmdb 只允许串行写入,不能多线程写同一个事务。它适用于读特别多,但是写较少的场景。
【 在 cat201702 的大作中提到: 】
: 这样一种场景:实时数据流希望把所有数据都存下来,总数据量未知可能有几G,也可能有几十上百G;C++中有没有好用的方便读写mmap库能动态扩展(如多个文件每个文件固定大小),找了一圈好像没有。
: 就是一个进程通过这个mmap库实时存储未知大小的数据, 另一个进程(也可能多个进程)通过mmap实时读取这个数据。
--
修改:hgoldfish FROM 117.28.128.*
FROM 117.28.128.*
谢谢,看到了lmdb这个
【 在 hgoldfish 的大作中提到: 】
: 我最近也碰到类似的应用场景。选的是 lmdb. 它是基于 mmap 的 kv 数据库。
: 我弄的 qtng 提供了一个类似于 std::map<> 的包装。
: //github/hgoldfish/qtnetworkng/blob/master/include/lmdb.h#L107
: ...................
--
FROM 111.199.185.*