什么是管理大量数据(高度数据)和替换这个巨大阵列的最有效方法?

Dar*_*ren 5 .net c# out-of-memory multidimensional-array

我需要能够快速查找这些数据并需要访问所有这些数据.不幸的是,我还需要节省内存(其中一些会导致内存OutofMemoryExceptions)

short[,,] data = new short[8000,8000,2];
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

  • 尝试过锯齿状阵列 - 同样的记忆问题
  • 试图分成更小的数组 - 仍然会出现内存问题
  • 唯一的解决方案是使用内存映射文件有效地映射这些数据还是有其他方法来做到这一点?

mne*_*syn 5

怎么样的数据库?毕竟,他们是为此而做的.

我建议你看看一些NoSQL数据库.根据您的需要,还有内存数据库[显然可能遭受相同的内存不足问题]和可以复制部署或链接到您的应用程序的数据库.

我不想手动搞乱存储细节,内存映射文件是一些数据库(至少是MongoDB)在内部执行的操作.从本质上讲,您将自己编写数据库,编写数据库并非易事 - 即使您缩小了用例范围.

Redis或Membase听起来像是你问题的合适替代品.据我所知,两者都能够为您管理RAM利用率,即根据需要从磁盘读取数据,并将数据缓存在RAM中以便快速访问.当然,您的访问模式将在此处发挥作用.

请记住,构建这些数据库需要付出很多努力.据维基百科称,Zynga正在使用Membase,Redis由VMWare赞助.