数据存储
为实现数据存储和处理,于是,NeoFS系统使用对象进行操作。其中,对象是指一种用于放置在数据存储设备上并通过网络传输的结构。该结构由有限长度的用户数据块和一组包含数据和对象本身信息的标头组成。此外,对象中的数据大小可以为零。
对象可以链接其他对象。用户数据可被分割成几个链接对象,以解决伸缩性和平衡问题。
存在包含对象格式的版本、其总长度、唯一标识符、到其他对象的可选链接、数据发布者的签名、下一个扩展标头的类型标识符以及内部NeoFS进程标识符的固定标头。
扩展标头具有类似的结构。另外,附加到对象的用户数据置于标头之后。
系统中的对象不可变。NeoFS核心仅使用固定的对象标头,并将数据视为不可变的字节序列,而不与内容进行交互。扩展标头存储关于用户数据属性、加密算法、校验和值、加密签章、标识符等信息。此外,扩展标头由单独的数据处理和转换模块按照出现的顺序进行处理。从而可通过将用户数据的处理和转换委托予系统的高层模块来组织处理信息的复杂方案。
用户可以为自有包容器定义布局规则和ACL。布局规则将应用于所有存储对象。该规则由一组应用于网络地图的SELECT()或FILTER()操作组成。此类操作的结果是衍生一种可以放置数据的网络地图的子图。其中,SELECT()操作应用于树。其输入操作是该级别的重复因子和存储区类型。另外,布局规则中的多个操作是按顺序排列,且每个后续的SELECT(r, 类型)操作均应用于前一操作的结果。FILTER()操作应用于图形。输入操作是存储区类型、值和比较运算。对于文本值,则可应用eq、ne操作。而对于数值,还可以应用gt、ge、lt和le操作。此外,图形上的一系列操作(于布局规则中)可以通过使用AND或NOT操作组合。递归地执行定位函数,并对上一步检索到的所有节点应用于下一步操作。
用户可以向NeoFS网络的任意节点发送存储或获取对象的请求,该节点将请求重定向到满足对象所属包容器布局规则的节点。
NeoFS请求、其结构和生存周期在API文档中进行了描述。
将包容器中对象完整性的控制权分配予该包容器的存储节点。它们将执行数据复制、垃圾收集、恢复和迁移。如果所有数据均按照存储策略存储,则该等操作的基础是包容器集体性奖励的经济模型;否则将会受到集体罚款。
存储节点除监视数据的完整性外,它还控制对数据的访问权限。NeoFS配备有灵活的ACL系统。它在包容器对象中涵盖写入包容器结构的基础ACL、承载令牌和扩展ACL(若基础ACL可允许)。其中,基础ACL被写入容器结构中,因此它与容器一起创建且无法更改。此外,基础ACL的验证还必须很便宜,且能够满足大多数用户的需求。在包容器结构中,这是存储位字段的32位整数。扩展ACL存储于包容器内的对象中。它不能被更改,但可以使用新版本添加新对象,该新版本将在逻辑上替换先前创建的对象。 而在扩展对象标头中,这表明是扩展ACL类型的对象及其版本。另外,扩展ACL类型的对象仅由包容器的所有者创建,这在逻辑上源于底层ACL的不可变性。
如果用户在创建包容器时设置了使用扩展ACL的可能性,则系统会在有效负载部分使用零版本和空访问表自动创建扩展ACL对象。若在尝试获取配有扩展ACL的对象时发生错误,则视为授权检查失败。
承载关键字用于激活对在请求标头中传输的承载标记的授权检查。这是一个与扩展ACL类型相同的表,但它包含指示令牌有效性时间的字段和返回到容器所有者的密钥签名链。此外,承载令牌的处理方式与扩展ACL相同。如果请求中存在承载令牌,那么它将取消对扩展ACL的检查。