我计划开发一个高性能的本地数据存储。
- 多个进程应该能够将数据附加到该数据存储。
- 数据从字符串的基本int值到字节数组(原始图像)不等。
- 其他进程应该能够使用字符串标识符访问数据。
- 访问应该是高性能的。应尽可能避免复制操作。
到目前为止我对解决方案的想法:
- 使用boost :: interprocess
来共享内存
- 使用hashmap作为超级数据结构(boost :: unordered)
- 所有想要与该数据存储通信的进程都使用dll,它实现了类似的功能
- int getInt(字符串标识符)
- void putInt(string identifier,int value)
- void * getData(字符串标识符,int& length)
- void putData(字符串标识符,void * data,int length)
- 将使用dll中的互斥锁控制访问。
- 指针是共享内存中的一个问题,因此boost具有offset_ptr的概念。
对我来说仍有疑问的是内存管理:
- 是否可以将可变数据存储为散列图中的值?
- 使用boost :: variant或boost :: any是否可以与boost :: interprocess和推荐使用?
- 或者我应该定义一个自己的结构来存储数据。
- 如何处理大小可变的数据(字节数组,原始图像)?
- 这些数据是应该存储在共享内存的separte部分中,只有指针(offset_ptr)应该存储在hashmap中,还是这些数据可以存储在hashmap本身中?
- 如果存储在单独的部分中,我是否必须自己组织这个单独的内存部分。是否有可用于组织内存部分的概念或库?
- 如果hashmap可以直接保存这些原始数据,那么如果重新散列hashmap,这些原始数据的指针是否仍然有效?
欢迎任何建议。我来自java,所以内存管理对我来说非常复杂。提前谢谢。