libpmemobj
libpmemobj 是一种提供事务对象存储的 C 库,可为持久内存编程提供动态内存分配器、事务和常规功能。该库可以解决在持久内存编程时遇到的许多常见的算法和数据问题。如果选择使用 C 编程语言,而且需要使用通用内存分配器和事务时,则可以使用 libpmemobj。基于持久化内存的挑战,数据需要保持数据原子性、断电一致性,同时能够恢复数据。libpmemobj是一个具有事务性的通用的持久化库,可以解决持久化内存所面临的各个挑战。如图 3 libpmemobj的接口框架, libpmemobj依赖libpmem提供持久化的原语支持,并且提供和libpmem接口类似的原语接口(Primitives APIs),这些接口和libpmem一样不支持事务性的操作,应用需要考虑数据原子性、一致性以及数据的恢复。libpmemobj利用统一的日志(unified logs)来实现数据的事务特性。持久化内存的原子分配和事务的接口(Atomic APIs 、Tracactional APIs、Action APIs)都是基于这些统一的日志来实现的。为了保证数据的可恢复性,需要考虑持久化内存的位置的独立性,所以应用不能利用直接地址来保存数据。libpmemobj使用偏移指针(offset pointers),这是相对于内存池基地址的偏移来表示一个数据对象。持久化内存是以文件的方式暴露给应用,通过MMAP来获得线性地址,让应用可以使用字节访问的方式直接访问持久化内存。libpmemobj 是一种提供事务对象存储的 C 库