1.7.4 Neo4j的存储优化
Neo4j支持存储优化(压缩和内联存储属性值),对于某些短字符的属性可以直接存储在属性文件中(neostore.propertystore.db)。在实际操作中,像邮政编码、电话号码这样的短字符串属性就可以直接内联到属性存储文件,而不是单独地放在另一个动态存储区,这样将大幅减少I/O操作并且增大吞吐量,因为只有一个文件需要访问。
除了可以内联属性值,Neo4j还可以对属性名称的空间严格维护,例如在社交网络中,有可能会有多个节点存在first_name和last_name这样的属性。如果将每个属性都逐字写入到磁盘上就会造成浪费。因此,替代方案是属性名称都通过属性索引文件从属性存储中间接引用。属性索引允许所有具有相同名称的属性共享单个记录,因而Neo4j可以节省相当大的空间和I/O开销。
即使现在的磁盘访问速度已经很快了,但是CPU访问磁盘仍然比CPU直接访问高速缓存要慢得多。因此,Neo4j也采用了缓存策略,保证那些经常访问的数据可以快速地被多次重复访问。Neo4j高速缓存的页面置换算法是基于最不经常使用的页置换(Least Frequently Used,LFU)缓存策略,根据页的常用程度进行微调。也就是说即使有些页面近期没有使用过,但是因为以前的使用频率很高,那么在短期之内它也是不会被淘汰的。该策略保证了缓存资源在统计学上的最与配置。