AWS Neptune 与原始 CSV 卷差异

AWS Neptune vs Raw CSV Volume Discrepancy

我试图了解我的原始 S3 文件的大小与我加载它时 Neptune 的体积之间的差异。我正在测试我的原始图表的一小部分(~15%,只有顶点),其中原始 CSV 大小为 3.1GB(无压缩)但是当它加载到 Neptune 时,它似乎是 59.6GB。我知道有 10GB 的大小是动态添加的,但即便如此,鉴于我的初始数据集,我觉得 50GB+ 还是过多了。这是一个全新的集群。

对于我的测试,我只有 4 个具有单一基数的属性(2 个字符串,2 个整数)。我有 9000 万个顶点(没有边,只是测试体积的增量)。我的真实场景是 600+ 百万个顶点,可能是边的 2 倍。当我们加载整个数据集时,我们接近 2TB 的数据并且开始出现性能问题(必须转到卷存储,没有缓存)。

是否有类似于 DynamoDB 的文档,关于属性等方面的大小估计?我想在设计新的数据模型或数据获取策略时考虑这些因素。

发电机 link: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/CapacityUnitCalculations.html

谢谢!

预计存储卷中图形数据的大小将大于CSV文件的大小。默认情况下,Neptune 自动维护数据的三个索引。还可以选择启用第四个索引。还维护了额外的数据结构,以帮助有效地存储和查找数据。

关于磁盘大小和实例内存的问题,请记住,Neptune 实例仅在内存中缓存回答它们发送的查询所需的数据。 Neptune 不需要(也不会尝试)提前将整个索引加载到内存中。只获取和缓存回答查询所需的部分。查询引擎将决定它需要哪些索引的哪些部分作为查询计划、优化和执行的一部分。

加载 CSV 后使用的确切存储量将根据属性类型和是否启用第四个索引等因素而有所不同。很难提供一个精确的公式,但肯定会看到使用的存储量比 CSV 文件的大小多很多。

请注意,如果您启用 Neptune Streams 功能,这也会占用额外的存储空间,以便持久保存流。

2022-01-07 更新

我应该在原来的答案中添加 this link。它指向更详细地解释 Neptune 如何存储数据的文档。

至于每个实例上的缓冲池缓存,实例内存的很大一部分专用于该缓存。当缓存处于冷状态时,您会看到 BufferCacheHitRatio CloudWatch 指标降至 99.9% 以下(或接近 99.9%)。这表明所需数据不在缓存中,必须从存储卷中获取。随着缓存的升温,该指标应该保持在 99.9% 左右的范围内,除非您填满缓存并且必须驱逐一些旧页面或触摸以前未触及的数据。

如果您知道您希望经常接触的图形部分,您当然可以 运行 预热缓存的查询。请注意,每个实例(主实例和任何只读副本)都根据它所看到的查询维护自己唯一的缓存。因此,如果您拥有的不仅仅是一个主实例(推荐用于 HA),您可能希望将某些查询定向到特定实例。