当前位置 博文首页 > weixin_ccjz9527的博客:阿兰戈布的新卫星收藏特色

    weixin_ccjz9527的博客:阿兰戈布的新卫星收藏特色

    作者:[db:作者] 时间:2021-07-05 19:00

    新版本3。2、我们引入了一个新功能,称为卫星收藏。 这篇文章解释了这一切是关于什么的,以及它如何帮助你,并给出了一个具体的用例。

    连接操作非常有用,但是在分布式数据库中可能会很麻烦。 这是因为通常情况下,连接操作必须将驻留在不同机器上的不同数据片段集合在一起。 这将导致集群内部通信,并很容易破坏查询性能。 就像现在的许多环境一样,数据局部性对于避免这种麻烦非常重要。 没有万灵药,因为在许多情况下,人们无法改善数据的局部性。

    一个可以实现某些功能的特殊情况是,如果您需要一个非常大的集合(分散在您的集群中)和一个小集合之间的连接操作,因为这样就可以将小集合复制到每台服务器上,并且所有连接操作都可以在没有网络通信的情况下执行。

    这就是卫星收藏所做的。 在ArangoDB中,卫星集合是指恰好有一个碎片自动同步复制到集群中每个数据库服务器的集合。 此外,AQL查询优化器可以识别与其他分片集合的连接操作,并组织查询执行,从而利用复制的数据并避免大量昂贵的网络流量。

    “卫星集合”这个名字来自于一个小集合(卫星)的心理图像,它围绕着一个大集合(更大的行星)的所有碎片运行,总是在下一次连接操作的附近,用一个快速的表面轨道穿梭器代替星际交通。

    假设您有一个物联网用例,其中包含来自各种设备的大量传感器数据。 单个事件的集合对于单个服务器来说显然太大了,但是设备的数量小到足以复制到每个服务器。 如果您现在需要选择某些事件,通常受其时间戳的限制,但也根据产生事件的设备上的某些条件进行过滤,那么您必须将事件的数据与其设备的数据放在一起。

    一种方法是在每个事件中嵌入设备数据,从而避免任何连接操作。 这首先需要更多的存储空间,但也有其他缺点。 首先,它违背了数据规范化的原则,因为设备数据是冗余存储的。 其次(当然也是相关的),不再有一个单一的地方保存所有的设备数据,所以很难获得所有设备的概述或类似的东西。

    另一个明智的方法是分开保存设备数据,比如说在一个较小的集合中,并通过一个外键将一个事件连接到它的设备。 这是通常的关系方法,很有意义。

    但是,对于这样的查询,它需要一个连接操作:

    
    

    显然,我们假设大型事件集合在属性上有一个排序索引。

    这将获取规定时间范围内的所有事件,这些事件对应的设备具有固件版本17,这是一个在实践中很可能发生的查询。 有许多类似的用例,关键的要素是需要一个大集合和一个小集合之间的连接。

    让我们看看查询引擎必须做什么来执行上面的查询。

    它几乎肯定希望在上使用索引,因此,在集合的每个碎片上,它使用该索引来查找相应的事件。 对于找到的每个这样的事件,现在必须找到相应的设备来对属性进行过滤。

    在非卫星情况下,查询引擎必须获取所有找到的事件,将它们移动到保存小型设备集合的位置,然后对每个这样的事件执行查找,如果固件版本匹配,则丢弃该事件或将其放入结果集中。
    ArangoDB甚至会从协调器上的所有碎片中收集所有结果,然后将它们发送到保存设备的数据库服务器。 结果集将被发送回协调器,然后发送到客户端。

    让我们用几个具体的数字来分析一下。 假设有数十亿个事件,其中一百万个在我们感兴趣的时间范围内。 此外,假设每1000个设备中大约有一个具有特定的固件,并且事件在设备之间均匀分布。

    然后,上面的查询将在十亿个中找到一百万个,分布在集合的碎片中。 总的来说,它将通过网络向协调器发送一百万个事件(每个事件来自一个碎片),然后将所有事件发送到持有设备的DBserver。 在那里,它将在本地执行一百万次查找,并丢弃1000个设备中的999个,产生1000个结果,这些结果将被发送回协调器。 我们总共发了100万英镑on events two times over the wire, this is expensive.

    如果集合是附属集合,则数据驻留在每个服务器上,也就是说,靠近集合的每个碎片。 因此,查询优化器可以在每个碎片上选择所讨论的时间范围内的事件,并直接执行设备查找,而无需任何网络流量。 由于固件版本的原因,数据库同步 它丢弃了大部分结果,只需将1000个结果发送回协调器,然后再发送到客户端。 它甚至可以以完全并行的方式执行,但这是未来性能的增强。

    也就是说,在这种情况下,净节省效应不是必须通过网络发送一百万个事件两次。 如果假设一个事件使用500字节,那么这是大约1GB的网络传输。 在快速以太网上,这大约需要100秒。 在千兆位以太网上,在最佳条件下只有8秒钟,但这仍然很明显。

    我们的实验实际上证实了网络流量和时间的节省。 在接下来的几周,我们将发布一个基准,包括所有使用的数据和完成的测量,所以要注意更多的细节。

    cs