为什么持久性内存会改变你的世界!

如果你还没有听说非易失性RAM存储器将要到来,它将会改变数据库、消息队列和日志的持久性模式,那么想了解更多关于这个新的硬件浪潮, 请继续阅读。。

API
第一个也是最重要的方面是Windows提供了这种持久性内存API,是可以重用现在已经存在的API。首先,如果你想将这种驱动API作为普通块block存储使用,你也可以做到,你可以创建文件,写入它们等。还有另一种使用它的方法,速度更快,称为DAX。

直接访问特性DAX能够让你直接使用非易失性存储器。也就是说用一个原始指针访问内存。如何获取指针? 使用旧式内存映射文件API。 首先,创建一个文件,然后映射它,就这些!没有FlushFileBuffers,不需要FSYNC。只是一个内存指针。 你能想象编写一个映射文件,就会让它持久化了吗?

速度
非易失性存储器真的很快。 你可以每秒写4GB。 是的,它是每秒4GB的持久性内存。延迟非常低。 它是如此之低,使用任何形式的异步编程(async-await)都成了多余,不如等待这种内存直接写入。这意味着你的方法中访问使用DAX映射的文件内存不再需要异步机制了。当然,你可能为了兼容性而保留它们。

顺序很重要
它看起来像科技天堂。 断电了就不再丢失数据? 不是这样的。 持久存储器充当内存时, 数据的执行顺序是传输的。 想象一下现在写下面的字符串:

BLAH

如果假设在复制这个字符串的三个字母后掉电,你就只能得到:

BLA

虽然与普通内存表现出同样的情况,显然这不是我们对其实现持久性的希望。因此这个时候良好的老式IO访问模式还仍然是重要的,像预写日志write-ahead logging 或写入时复制copy-on-write都还是需要得 。但再次提醒你,这里就是使用同步机制也是无成本代价的,没有竞争锁等影响性能的代价,同时也不需要flush。

采用者
持久性记忆会改变世界。 SQL服务器2016年已经采用它,你可以看到在这里(采取跨标准HDD和SDD存储器的NTFS 直接访问文件卷技术) 。 有些数据库已经使用,如LMDB使用内存映射文件(与windows相同的API!)具有持久(durable)能力了。 以后将有更多类似的数据库。

总结
持久性内存就在这里。 你不需重写或重新思考你的应用程序(指的是不直接处理IO的应用程序,处理IO还是需要使用异步机制的)。我们可以将持久性内存应用到数据库领域或其他非IO绑定的系统中,它将是一个真正的游戏规则改变者。

Why persistent memory will change your world – Ext

[该贴被banq于2016-12-10 22:19修改过]