寻址空间分配,直接寻址地址空间

首页 > 实用技巧 > 作者:YD1662023-11-11 02:35:05

寻址空间分配,直接寻址地址空间(1)

链接数据的世界,是建立在不稳定的基础之上的,这种基础阻止了真正的数据共享空间出现。问题不在于数据,而在于数据的链接方式。具体而言,是链接的方式得到解决。

地址是指事物统一、简便的方式;地理地址就是一个明显的例子。1600宾夕法尼亚大道是白宫的地址,268伊丽莎白街是我童年故乡的地址。这些房屋的大小和功能各不相同,但它们都是地址(相对)一致的系统地方。通过地址可以更容易找到目的地(位置)。

今天的互联网是位置寻址。Youtube.com和Boingboing.net都是地点。我们通过其通用资源定位符(URL)来引用视频或博客等内容。就像我童年的房子一样,互联网是围绕内容的位置组织起来的。

位置寻址适用于多种用途,但由于两个重要原因:链接崩溃和内容改变,对链接数据来说是一个糟糕的系统。一个崩溃的链接导致的是,互联网上一个永久不可用的位置,例如经常看到的“404、没有发现”。链接崩溃在互联网上普遍存在,并且在数据环境中它存在很大问题,因为它不足以让人产生依赖。

内容改变可以说是一个更隐蔽的问题。完全有可能,到现在有人拆毁了我童年的家,并用另一所房子取而代之。在这种情况下,地址是相同的,但内容已经改变,自我上次访问以来已变的不同。在数据环境中,确认数据的存在,且未发生变化的认知和程序开销,阻碍了我们首先接受挑战。

这些问题使开放的数据格局变得无法实现。因为不可能构建跨越位置和服务,足够可靠的系统,所以数据提供者几乎没有产生相互依赖的动力。

那么,还有什么选择呢?

位置寻址在我们的理解中是如此的根深蒂固,以至于可能需要一点“遗忘”才能认识到,存在其他替代的寻址系统。书籍的另一种叫法可以是书名。书籍有书名、作者、出版商和ISBN号。书名是对其中内容有意义的参考。《帽子里的猫》确实是一本关于猫戴着帽子的书。因此,我们可以说书籍是内容。内容寻址是指它是什么,而不是它在哪里。

要求书的地理位置似乎很愚蠢,因为这本书有N多本存放在不同的地方。其实只要地址后面的内容相同,位置是无关紧要的。如果我向某人索取《帽子里的猫》,他们递给我一份《傲慢与偏见》的副本,我会立即知道他们的地址错了。

分布式Web基于内容寻址。实际上,这意味着通过哈希引用内容哈希是通过创建内容固定长度“指纹”的算法,来运行内容的输出。该算法是将内容连接到此指纹的固定过程,并且更改其中的任何内容 (像素阴影,标点符号,小数点),都将会更改生成的散列。由于算法是一个固定的开放过程,因此可以独立验证哈希。

从位置寻址切换到内容寻址具有分散效果。从位置的关注中解脱出来,每次“下载数据集,都可以用来使数据集可用,从而防止链接崩溃。更重要的是,分布式网络上的内容改变根本不可能发生;因为内容不能在不改变地址的情况下做出改变,而这仅仅是个开始。

内容寻址有助于共享依赖关系。因为:1、有人可以与我分享他们数据集的准确而权威的副本;2、她不能在我不知情的情况下更改数据,我可以依赖它。一旦我能依赖别人的数据,那我就必须创建一个更少的数据集了。我现在可以自由地利用这段时间,创建或更新其他人可能使用的其他数据,同时保存资源和增长知识。

共享依赖是开源数据中缺少开源软件的神奇之处。为了解决这个问题,我建议我们在分布式网络上构建一个公共基础设施,即数据集版本控制系统 (DVCS)。

以下是有关如何实施此DVCS的技术细节的详细概述。

此数据集版本控制系统的基本目标是最大化内容寻址网络中的哈希冲突,因为哈希冲突能够发现和重用现有数据。下面描述的技术旨在,确保具有相同特征的数据集、以及对数据集语义上等效的查询;即使数据集是由不同位置的不同方、在不同时间创建的,每个数据集都解析为相同的哈希。这些共享特征构成了一个通用词典,分布式网络中的对等节点可以用来比较数据集,并在Internet规模图上执行此操作。

寻址空间分配,直接寻址地址空间(2)

为了最大限度的发挥这些哈希冲突,必须使描述数据集和查询的过程精确且一致。在最大程度上,相同的内容和查询必须产生相同的哈希值; 因此,数据资源和查询的定义必须遵循精心定义的约定,并且必须限制替代形式。为了补偿这种刚性,数据集组件被单独存储,然后使用单独的机制进行连接,以进行链接和发现。这就导致了一个数据集的四个组成部分:Data数据、Structure结构、Meta元、和Commit提交。

数据 和 结构

数据具有其自然含义:*某些原始值的集合* - 数值,定性值,任何以某种系统方式组织的东西。今天用于存储数据的示例文件格式是csv格式,其由用逗号分隔的数字或文本值的行组成,可选的第一行包含列标题。下面是一个虚构的示例数据集precip:

lat,lng,precip_amt,date,note 60.00,-50.049303,0,2017-02-14,no precip to report 60.00,-50.049303,1014,2017-02-15,two storm cells observed ...

内容寻址文件系统中的数据对象,将是由哈希标识的静态对象。假设此数据文件解析为以下网络上的base58编码哈希:

QmNk2XkDpn8vBantgpHt6B52kcyfHcQVJUF4QzDqjiGu52

如上所述,此哈希将是唯一的:任何计算的哈希值与上述哈希值匹配的文件将包含相同的内容,无论其创建方式和位置如何。重要的是要注意,该系统会竭尽全力避免改变原始数据。在没有任何修改的情况下添加到网络的数据,自然会与可能尝试添加相同文件的其他人发生冲突,从而允许使用相同数据的对等节点自然地找到彼此。

能够解释给定数据对象内包含的字节,需要数据自身之外的附加信息。需要此信息来提供有关如何解释,数据对象内容的精确详细信息。这就是Structure(结构)的目的。它包含指示数据对象格式、字符编码、压缩设置等的字段。以下是以我们可读的JSON格式表示的示例结构:

{ "qri" : "st:1.0", "format" : "text/csv", "formatConfig" : { "delimiter": ",", "doubleQuote": true, "lineTerminator": "\r\n", "quoteChar": "\"", "skipInitialSpace": true, "header": true }, "encoding" : "utf-8", "compression" : "none", "schema" : { "type": "array", "items" : { "type": "array", "items: [ { "title" : "lat", "type" : "number" }, { "title" : "lng", "type" : "number" }, { "title" : "precip_amt", "type" : "integer" }, { "title" : "datestamp", "type" : "string" }, { "title" : "note", "type": "string" } ] }, },}

结构包含允许软件和用户读取数据对象内容的信息。例如,格式指定数据的存储方式; 字段值是MIME类型值(例如,"text/csv"对于CSV)。相关字段formatConfig尽可能地消除关于如何解释指定格式的歧义,因为有些格式具有多种方言,并且需要精确识别变体。

这些概念同样适用于其他数据格式,结构规范旨在适应互操作性。JSON、XML、Microsoft Excel™电子表格、sqlite文件都是结构应该能够通过使用相同方法,进行规范化的格式示例。

schema有一些额外的解释。使用开放 API格式推广的JSON模式规范,对所有数据集进行验证和解释。许多格式(如CSV)不会在内部定义值的数据类型,也不提供传递此信息的标准方法,这迫使需求定义一种方法,以便将其外部化到数据文件之外。然而,以一种通用方式显式地描述格式,使得可以独立地存储和重用这些描述:它们成为内容寻址存储空间中的另一个对象,像其他对象一样进行哈希存储。虽然模式是根据JSON模式规范定义的,但它们可以应用于各种数据格式。

一个结构描述了Data对象的形式。这两者与描述性元数据连接:Meta和Commit包含创建时间戳、自动生成的消息和创建数据集对等节点的加密签名对象。

一个数据集必须解决的只有一个数据实体。这是通过使用关联数据和结构对象的唯一哈希来实现的。这种关注点分离实现了两个重要目标:

  1. 可以通过不同的元数据来描述相同的数据。重复实验可以产生相同的数据,但是如果仅指示不同的时间戳或条件,则应该以不同的方式描述。将描述与值分开可以节省存储和带宽,因为只有更改(元数据)被单独存储,允许对等节点对相同数据做出不同的声明。
  2. 元数据格式可以独立更改/ 更新。在许多情况下,数据在收集后仍然是静态的。然而,软件框架经常快速变化,开发人员和用户发现需要改变和更新元数据。通过此处描述的分离,可以在不更改基础数据对象的情况下更改元数据。这不仅节省了资源,而且以具体的方式表明它是相同的数据。这也适用于结构及其模式对象,允许对等节点在不改变数据本身的情况下,更改数据的验证和解释方式。
对数据集的更改

为了保留更改的踪迹,Dataset包含一个名为previous的字段,该字段引用另一个Dataset对象的哈希值,以及一个Commit描述更改的字段,包括进行更改的对等节点的私钥签名。这建立了对数据集任何组件更改的有向非循环图(DAG),无论这是元数据、还是Data、或者Structure。例如,在不更改Data或更改元数据的情况下进行更改时Structure,只commit需要更改对象,并保留对未更改对象的引用:

寻址空间分配,直接寻址地址空间(3)

对大型数据集进行版本控制更改听起来像是消耗大量硬盘空间的秘诀。值得庆幸的是,每次更改数据都不一定会导致完整内容重复。由于这些文件旨在通过分布式Web发送,因此每个文件本身实际上是一个对象图,被划分为块。由于这种分块,数据更改自然会与先前版本重复。因此,随着时间的推移,对数据的更改占用的空间,比从版本到版本的完整重复数据要少:

寻址空间分配,直接寻址地址空间(4)

构建更像开源代码系统的开放数据系统,需要重新思考一些假设。内容寻址的分布式网络,使我们能够质疑当今数据库支持的,开放数据系统的假设。确定性查询可以用更有效和有益的模式,取代常见的体系结构模式,该模式利用内容寻址的文件系统,如IPFS。如果成功,这可以形成开放数据公共基础,通过使用自然增加其容量,为所有使用它的人带来好处,同时仍然适应不断发展的工具生态系统。

确定性查询永远不会消除所有其他数据库技术,而是减少大量用户在相同数据上,重新创建相同访问和编码/解码步骤的需要。新的查询仍然需要数据库访问; 当多个分布式用户或进程重复相同的查询时,将实现减少计算和网络访问的收益。当今的现实情况是,对内容寻址网络的查询可能比对本地数据库的查询慢,但这些损失将通过数据的去重复和总体中的其他资源减少所抵消。这种确定性查询形式出于可重复性和互操作性的考虑,故意接受性能权衡。

像任何事情一样,这种方法最适合某些情况。该技术的功效与基础数据变化的频率程度成反比。值得庆幸的是,大多数数据集都属于这一类,包括科学研究数据、政府数据、工业数据等等。数据集版本控制系统,提供了一种构建开放数据公共资源的方法,以便为开放数据的集体累积推进提供更大的机会。

(本文发表于QRI国外博客,经由 Filecoin,cn 中国社区翻译整理)

【往期文章】

更多咨询点击“了解更多”,添加 ipfsxiaomishu 进入IPFS社群交流。

,

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.