写点什么

链表实现插入排序、机器学习 Top 10 算法、图数据库实战 Neptune、John 易筋 ARTS 打卡 Week 24

用户头像
John(易筋)
关注
发布于: 2020 年 11 月 01 日

1. Algorithm: 每周至少做一个 LeetCode 的算法题

笔者的文章:

算法:链表实现插入排序Insertion Sort List

题目

147. Insertion Sort List


Sort a linked list using insertion sort.

A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.

With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list

Algorithm of Insertion Sort:


  1. Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.

  2. At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there.

  3. It repeats until no input elements remain.


Example 1:


Input: 4->2->1->3Output: 1->2->3->4
复制代码


Example 2:


Input: -1->5->3->4->0Output: -1->0->3->4->5
复制代码


解题思路

平时插入排序用的是数组,现在用链表。思路是一样的,时间复杂度还是 n^2.

  1. 先创建一个空的链表,为结果链表;

  2. 遍历当前链表;

  3. 创建结果链表的当前位置,和下一个位置;

  4. 找到需要插入当前位置的元素,在已有结果链表的位置;

  5. 暂存下一个节点;

  6. 以后结果链表的当前位置指向当前位置,当前位置指向结果链表的下一个位置;


# Definition for singly-linked list.class ListNode:    def __init__(self, val=0, next=None):        self.val = val        self.next = nextclass InsertionSortList:
def insertionSortList(self, head: ListNode) -> ListNode: result = ListNode() current = head
while current: # At each iteration, we insert an element into the resulting list. pre = result next = result.next # find the position to insert the current node while next: if current.val < next.val: break pre = next next = next.next
itemNext = current.next # insert the current node to the new list pre.next = current current.next = next # moving on to the next iteration current = itemNext
return result.next
复制代码


2. Review: 阅读并点评至少一篇英文技术文章

笔者博客:

翻译:机器学习 数据科学家 top 10 十大算法

说明

本文介绍了机器学习新手需要了解的 10 大算法,包括线性回归、Logistic 回归、朴素贝叶斯、K 近邻算法等。


在机器学习中,有一种叫做「没有免费的午餐」的定理。简而言之,它指出没有任何一种算法对所有问题都有效,在监督学习(即预测建模)中尤其如此。


例如,你不能说神经网络总是比决策树好,反之亦然。有很多因素在起作用,例如数据集的大小和结构。


因此,你应该针对具体问题尝试多种不同算法,并留出一个数据「测试集」来评估性能、选出优胜者。


当然,你尝试的算法必须适合你的问题,也就是选择正确的机器学习任务。打个比方,如果你需要打扫房子,你可能会用吸尘器、扫帚或拖把,但是你不会拿出铲子开始挖土。


大原则

不过也有一个普遍原则,即所有监督机器学习算法预测建模的基础。


机器学习算法被描述为学习一个目标函数 f,该函数将输入变量 X 最好地映射到输出变量 Y:Y = f(X)


这是一个普遍的学习任务,我们可以根据输入变量 X 的新样本对 Y 进行预测。我们不知道函数 f 的样子或形式。如果我们知道的话,我们将会直接使用它,不需要用机器学习算法从数据中学习。


最常见的机器学习算法是学习映射 Y = f(X) 来预测新 X 的 Y。这叫做预测建模或预测分析,我们的目标是尽可能作出最准确的预测。


对于想了解机器学习基础知识的新手,本文将概述数据科学家使用的 top 10 机器学习算法。

1. 线性回归


线性回归可能是统计学和机器学习中最知名和最易理解的算法之一。


预测建模主要关注最小化模型误差或者尽可能作出最准确的预测,以可解释性为代价。我们将借用、重用包括统计学在内的很多不同领域的算法,并将其用于这些目的。


线性回归的表示是一个方程,它通过找到输入变量的特定权重(称为系数 B),来描述一条最适合表示输入变量 x 与输出变量 y 关系的直线。


线性回归


例如:y = B0 + B1 * x


我们将根据输入 x 预测 y,线性回归学习算法的目标是找到系数 B0 和 B1 的值。


可以使用不同的技术从数据中学习线性回归模型,例如用于普通最小二乘法和梯度下降优化的线性代数解。


线性回归已经存在了 200 多年,并得到了广泛研究。使用这种技术的一些经验是尽可能去除非常相似(相关)的变量,并去除噪音。这是一种快速、简单的技术,可以首先尝试一下。


2. Logistic 回归


Logistic 回归是机器学习从统计学中借鉴的另一种技术。它是解决二分类问题的首选方法。


Logistic 回归与线性回归相似,目标都是找到每个输入变量的权重,即系数值。与线性回归不同的是,Logistic 回归对输出的预测使用被称为 logistic 函数的非线性函数进行变换。


logistic 函数看起来像一个大的 S,并且可以将任何值转换到 0 到 1 的区间内。这非常实用,因为我们可以规定 logistic 函数的输出值是 0 和 1(例如,输入小于 0.5 则输出为 1)并预测类别值。

Logistic 回归


由于模型的学习方式,Logistic 回归的预测也可以作为给定数据实例(属于类别 0 或 1)的概率。这对于需要为预测提供更多依据的问题很有用。


像线性回归一样,Logistic 回归在删除与输出变量无关的属性以及非常相似(相关)的属性时效果更好。它是一个快速的学习模型,并且对于二分类问题非常有效。

3. 线性判别分析(LDA)


Logistic 回归是一种分类算法,传统上,它仅限于只有两类的分类问题。如果你有两个以上的类别,那么线性判别分析是首选的线性分类技术。


LDA 的表示非常简单直接。它由数据的统计属性构成,对每个类别进行计算。单个输入变量的 LDA 包括:


  • 每个类别的平均值;


  • 所有类别的方差。

线性判别分析


进行预测的方法是计算每个类别的判别值并对具备最大值的类别进行预测。该技术假设数据呈高斯分布(钟形曲线),因此最好预先从数据中删除异常值。这是处理分类预测建模问题的一种简单而强大的方法。


4. 分类与回归树


决策树是预测建模机器学习的一种重要算法。


决策树模型的表示是一个二叉树。这是算法和数据结构中的二叉树,没什么特别的。每个节点代表一个单独的输入变量 x 和该变量上的一个分割点(假设变量是数字)。


决策树


决策树的叶节点包含一个用于预测的输出变量 y。通过遍历该树的分割点,直到到达一个叶节点并输出该节点的类别值就可以作出预测。


决策树学习速度和预测速度都很快。它们还可以解决大量问题,并且不需要对数据做特别准备。


5. 朴素贝叶斯


朴素贝叶斯是一个简单但是很强大的预测建模算法。


该模型由两种概率组成,这两种概率都可以直接从训练数据中计算出来:

1)每个类别的概率;

2)给定每个 x 的值,每个类别的条件概率。一旦计算出来,概率模型可用于使用贝叶斯定理对新数据进行预测。当你的数据是实值时,通常假设一个高斯分布(钟形曲线),这样你可以简单的估计这些概率。

贝叶斯定理


朴素贝叶斯之所以是朴素的,是因为它假设每个输入变量是独立的。这是一个强大的假设,真实的数据并非如此,但是,该技术在大量复杂问题上非常有用。

6. K 近邻算法


KNN 算法非常简单且有效。KNN 的模型表示是整个训练数据集。是不是很简单?


KNN 算法在整个训练集中搜索 K 个最相似实例(近邻)并汇总这 K 个实例的输出变量,以预测新数据点。对于回归问题,这可能是平均输出变量,对于分类问题,这可能是众数(或最常见的)类别值。


诀窍在于如何确定数据实例间的相似性。如果属性的度量单位相同(例如都是用英寸表示),那么最简单的技术是使用欧几里得距离,你可以根据每个输入变量之间的差值直接计算出来其数值。

K 近邻算法


KNN 需要大量内存或空间来存储所有数据,但是只有在需要预测时才执行计算(或学习)。你还可以随时更新和管理训练实例,以保持预测的准确性。


距离或紧密性的概念可能在非常高的维度(很多输入变量)中会瓦解,这对算法在你的问题上的性能产生负面影响。这被称为维数灾难。因此你最好只使用那些与预测输出变量最相关的输入变量。


7. 学习向量量化


K 近邻算法的一个缺点是你需要遍历整个训练数据集。学习向量量化算法(简称 LVQ)是一种人工神经网络算法,它允许你选择训练实例的数量,并精确地学习这些实例应该是什么样的。

学习向量量化


LVQ 的表示是码本向量的集合。这些是在开始时随机选择的,并逐渐调整以在学习算法的多次迭代中最好地总结训练数据集。在学习之后,码本向量可用于预测(类似 K 近邻算法)。最相似的近邻(最佳匹配的码本向量)通过计算每个码本向量和新数据实例之间的距离找到。然后返回最佳匹配单元的类别值或(回归中的实际值)作为预测。如果你重新调整数据,使其具有相同的范围(比如 0 到 1 之间),就可以获得最佳结果。


如果你发现 KNN 在你的数据集上达到很好的结果,请尝试用 LVQ 减少存储整个训练数据集的内存要求。

8. 支持向量机(SVM)


支持向量机可能是最受欢迎和最广泛讨论的机器学习算法之一。


超平面是分割输入变量空间的一条线。在 SVM 中,选择一条可以最好地根据输入变量类别(类别 0 或类别 1)对输入变量空间进行分割的超平面。在二维中,你可以将其视为一条线,我们假设所有的输入点都可以被这条线完全的分开。SVM 学习算法找到了可以让超平面对类别进行最佳分割的系数。

支持向量机


超平面和最近的数据点之间的距离被称为间隔。分开两个类别的最好的或最理想的超平面具备最大间隔。只有这些点与定义超平面和构建分类器有关。这些点被称为支持向量,它们支持或定义了超平面。实际上,优化算法用于寻找最大化间隔的系数的值。


SVM 可能是最强大的立即可用的分类器之一,值得一试。


9. Bagging 和随机森林


随机森林是最流行和最强大的机器学习算法之一。它是 Bootstrap Aggregation(又称 bagging)集成机器学习算法的一种。


bootstrap 是从数据样本中估算数量的一种强大的统计方法。例如平均数。你从数据中抽取大量样本,计算平均值,然后平均所有的平均值以便更好的估计真实的平均值。


bagging 使用相同的方法,但是它估计整个统计模型,最常见的是决策树。在训练数据中抽取多个样本,然后对每个数据样本建模。当你需要对新数据进行预测时,每个模型都进行预测,并将所有的预测值平均以便更好的估计真实的输出值。

随机森林


随机森林是对这种方法的一种调整,在随机森林的方法中决策树被创建以便于通过引入随机性来进行次优分割,而不是选择最佳分割点。


因此,针对每个数据样本创建的模型将会与其他方式得到的有所不同,不过虽然方法独特且不同,它们仍然是准确的。结合它们的预测可以更好的估计真实的输出值。


如果你用方差较高的算法(如决策树)得到了很好的结果,那么通常可以通过 bagging 该算法来获得更好的结果。


10. Boosting 和 AdaBoost


Boosting 是一种集成技术,它试图集成一些弱分类器来创建一个强分类器。这通过从训练数据中构建一个模型,然后创建第二个模型来尝试纠正第一个模型的错误来完成。一直添加模型直到能够完美预测训练集,或添加的模型数量已经达到最大数量。


AdaBoost 是第一个为二分类开发的真正成功的 boosting 算法。这是理解 boosting 的最佳起点。现代 boosting 方法建立在 AdaBoost 之上,最显著的是随机梯度提升。

AdaBoost


AdaBoost 与短决策树一起使用。在第一个决策树创建之后,利用每个训练实例上树的性能来衡量下一个决策树应该对每个训练实例付出多少注意力。难以预测的训练数据被分配更多权重,而容易预测的数据分配的权重较少。依次创建模型,每个模型在训练实例上更新权重,影响序列中下一个决策树的学习。在所有决策树建立之后,对新数据进行预测,并且通过每个决策树在训练数据上的精确度评估其性能。


因为在纠正算法错误上投入了太多注意力,所以具备已删除异常值的干净数据非常重要。


总结


初学者在面对各种机器学习算法时经常问:「我应该用哪个算法?」这个问题的答案取决于很多因素,包括:(1)数据的大小、质量和特性;(2)可用的计算时间;(3)任务的紧迫性;(4)你想用这些数据做什么。


即使是经验丰富的数据科学家在尝试不同的算法之前,也无法分辨哪种算法会表现最好。虽然还有很多其他的机器学习算法,但本篇文章中讨论的是最受欢迎的算法。如果你是机器学习的新手,这将是一个很好的学习起点。


原文链接

https://towardsdatascience.com/a-tour-of-the-top-10-algorithms-for-machine-learning-newbies-dde4edffae11


3. Tips: 学习至少一个技术技巧

笔者的文章:

图数据库实战 AWS Neptune Gremlin CloudFormation



https://ap-northeast-1-migration.s3-ap-northeast-1.amazonaws.com/neptune-full-stack-nested-template.json





在首页输入 Neptune, 进入到 Neptune 的数据库视图




neptunedbcluster-5pujrrsqlfkw.cluster-cp4hapr3z0qc.ap-northeast-1.neptune.amazonaws.com




01-About-the-Neptune-Notebook









04-Social-Network-Recommendations-with-Gremlin

路径修改:cat /home/ec2-user/graph_notebook_config.json



4. Share: 分享一篇有观点和思考的技术文章

笔者写的博客链接

图数据库 Gremlin, SparSL Amazon Neptune 技术概述


第 1 章 Amazon Neptune 技术概述

1.1 什么是图数据库

Amazon Neptune 是一项快速、可靠且完全托管的图数据库服务,可帮助您轻松 构建和运行使用高度互连数据集的应用程序。Amazon Neptune 的核心是专门构建的高 性能图数据库引擎,它进行了优化以存储数十亿个关系并将图形查询延迟降低到毫秒 级。 Amazon Neptune 支持常见的图形模型 Property Graph 和 W3C 的 RDF 及其关 联的查询语言 Apache TinkerPop Gremlin 和 SPARQL,从而使您能够轻松构建查询以有 效地导航高度互连数据集。Neptune 支持图形使用案例,如建议引擎、欺诈检测、知 识图谱、药物开发和网络安全。


Amazon Neptune 具有高可用性,并提供只读副本、时间点恢复、到 Amazon S3 的持续备份以及跨可用区复制等功能。Neptune 非常安全,可支持 HTTPS 加密客户端 连接和静态加密。Neptune 完全托管,因此,您再也无需担心数据库管理任务,例 如,硬件预置、软件修补、设置、配置或备份。


1.2 核心优势

1) 支持开放图形 API

Amazon Neptune 支持 Gremlin 和 SPARQL 的开放图谱 API,并为这些图形模型 及其查询语言提供高性能。使用 Amazon Neptune,您可以选择属性图形模型及其开源 查询语言 Apache TinkerPop Gremlin 或 W3C 标准资源描述框架 (RDF) 模型及其标准 查询语言 SPARQL。


2) 高性能和高可扩展性

Amazon Neptune 是一个专门构建的高性能图数据库。它针对处理图形查询进行 了优化。Neptune 可在三个可用区内支持最多 15 个低延迟读取副本,从而扩展读取容量并每秒执行超过 10 万个图形查询。您可以根据需求变化轻松扩展和缩小数据库 部署,包括从较小的实例类型到较大的实例类型。


3) 高可用性和持久性

Amazon Neptune 具有高可用性、持久性,并且符合 ACID (原子性、一致性、隔 离性、持久性)。Neptune 旨在提供超过 99.99% 的可用性。其存储系统具有容错能力 并能自我修复,专为云而构建,可以跨三个可用区复制六个数据副本。Neptune 会不 断将您的数据备份到 Amazon S3,并以透明方式从物理存储故障中恢复。对于高可用 性,实例故障转移通常只需不到 30 秒。


4) 高度安全

Amazon Neptune 为您的数据库提供多级安全保护,包括使用 Amazon VPC 进行 网络隔离、支持终端节点访问的 IAM 身份验证、HTTPS 加密的客户端连接、使用您通 过 AWS Key Management Service (KMS) 创建和控制的密钥对静态数据进行加密。在加 密的 Neptune 实例上,底层存储中的数据会被加密,在同一个集群中的自动备份、快 照和副本也会被加密。


5) 完全托管

使用 Amazon Neptune,您无需担心硬件预置、软件修补、设置、配置或备份等 数据库管理任务。Neptune 会自动持续地监控您的数据库并将其备份到 Amazon S3, 因此可实现精细的时间点恢复。您可以使用 Amazon CloudWatch 监控数据库性能。


1.3 使用场景

Amazon Neptune 等图数据库专门用于存储和导航关系。在社交网络、推荐引擎 和欺诈检测等使用案例中,您需要在数据之间创建关系并快速查询这些关系,此时, 图数据库将比关系数据库更具优势。使用关系数据库构建这些类型的应用程序面临着 许多挑战。您将需要多个具有多个外键的表。用于导航此数据的 SQL 查询需要嵌套查 询和复杂的联接,它们很快就会变得不灵便,而且随着数据量逐渐增加,查询的性能 也会降低。


Amazon Neptune 使用节点 (数据实体)、边缘 (关系) 和属性等图形结构来表示和

存储数据。这些关系存储为数据模型的一等公民。这样,系统便可直接关联节点中的 数据,从而显著提高导航数据中关系的查询的性能。Neptune 的大规模交互式性能可 有效地实现各种图形使用案例。


1) 社交网络

Amazon Neptune 可以快速轻松地处理大量的用户配置文件和交互,从而构建社 交网络应用程序。Neptune 能够以高吞吐量实现高度交互式的图形查询,从而为您的 应用程序带来社交功能。例如,如果您要向应用程序构建社交源,则可以使用 Neptune 来提供结果,它会优先向用户显示来自其家人、具有其所“赞”更新的好友以 及居住在其附近的好友的最新更新。


2) 推荐引擎

使用 Amazon Neptune,您可以在图形中存储客户兴趣、好友和购买历史记录等 信息之间的关系,并快速查询图形以提出个性化且相关的建议。例如,借助 Neptune,您可以使用高度可用的图数据库,并根据关注相同运动内容且具有类似购买 历史记录的其他人购买的产品,向用户提供产品推荐。或者,您可以识别有共同好友 但还不认识对方的人员,然后提供好友推荐。

3) 欺诈检测

借助 Amazon Neptune,您可以使用关系以近乎实时的方式处理财务和购买交 易,从而轻松检测欺诈模式。Neptune 提供完全托管服务来执行快速图形查询,从而 检测潜在购买者是否在使用与已知欺诈案例相同的电子邮件地址和信用卡。如果您要 构建零售欺诈检测应用程序,Neptune 可以帮助您构建图形查询,以便轻松检测关系 模式,例如多个人与个人电子邮件地址相关联,或者多个人共享同一个 IP 地址但居 住在不同的物理地址。

4) 知识图谱

Amazon Neptune 可帮助您构建知识图谱应用程序。使用知识图谱,您可以将信 息存储在图形模型中,并使用图形查询来支持用户轻松导航高度互连的数据集。 Neptune 支持开源和开放标准 API,从而您可以快速使用现有信息资源来构建知识图谱,并将其托管在完全托管的服务上。例如,如果用户对“蒙娜丽莎”感兴趣,您还可

以帮助他们发现达芬奇的其他艺术作品或卢浮宫的其他艺术品。利用知识图谱,您可 以将主题信息添加到产品目录,构建和查询复杂的监管规则模型,或者进行一般信息 建模(如维基数据)。

5) 生命科学

Amazon Neptune 可帮助您构建支持存储和导航生命科学领域内信息的应用程 序,并使用静态加密功能轻松处理敏感数据。例如,您可以使用 Neptune 来存储关于 疾病和基因相互作用的模型,并搜索蛋白质途径中的图形模式,以查找可能与疾病相 关的其他基因。您可以将化合物建模为图形,并查询分子结构中的模式。Neptune 还 可以帮助您整合信息,从而应对医疗保健和生命科学研究领域的挑战。您可以使用 Neptune 跨不同系统创建和存储数据,并专门组织研究出版物,从而快速查找相关信 息。

6) 网络/IT 运营

您可以使用 Amazon Neptune 存储网络图形,并使用图形查询来回答有多少台主 机正在运行特定应用程序等问题。Neptune 可以存储和处理数十亿的事件来管理和保 护您的网络。如果您检测到异常事件,则可以使用 Neptune 并通过事件属性来查询图 形模式,从而快速了解它可能对您的网络产生的影响。您可以查询 Neptune 以找到可 能遭入侵的其他主机或设备。例如,如果您在主机上检测到恶意文件,则 Neptune 可 以帮助您找到传播恶意文件的主机之间的连接,使您能够进行跟踪,找到下载该恶意 文件的原始主机。


1.4 参考架构

在开始设计数据库之前,我们还建议您参考 GitHub 存储库用于图形数据库的 AWS 参考架构,在其中您可以了解有关图形数据模型和查询语言选择的信息,并浏览 参考部署架构的示例,Amazon Neptune 的关键服务组件参考如下:

  • 主数据库实例 – 支持读取和写入操作,并执行针对集群卷的所有数据修改。每 个 Neptune 数据库集群均有一个主数据库实例,负责写入(即,加载或修改)图形数 据库内容。

  • Neptune 副本 – 连接到同一存储卷作为主数据库实例并仅支持读取操作。除主 数据库实例之外,每个 Neptune 数据库集群最多可拥有 15 个 Neptune 副本。这 样,通过将 Neptune 副本放在单独的可用区中并分配来自读取客户端的负载,可以实 现高可用性。

  • 集群卷 – Neptune 数据存储在集群卷中,旨在实现可靠性和高可用性。集群卷由 跨一个 AWS 区域中的多个可用区的数据副本组成。由于您的数据会自动跨可用区复 制,因此具有高持久性,数据丢失的可能性较小。

1.4.1 应用部署架构-NLB/ALB 模式

https://github.com/aws-samples/aws-dbs-refarch-graph/tree/master/src/connecting-using- a-load-balancer


NLB 模式部署架构概述:

1) 在这种体系结构中,您的 Neptune 群集至少在两个可用区中的两个子网中运行,每

个子网都在不同的可用区中。

2) Neptune DB 子网组在两个可用区中至少跨越两个子网。

3) 来自外部客户端的 Web 连接在公共子网中的网络负载平衡器上终止。

4) 负载平衡器将请求转发到 Neptune 群集端点(该端点随后路由到数据库群集中的主

实例)。

5) Lambda 函数会定期刷新群集端点的目标 IP 地址。

6) 此 Lambda 函数由 CloudWatch 事件触发。触发时,该函数向 DNS 服务器查询 Neptune

群集终结点的 IP 地址。 它将新的 IP 地址注册到负载均衡器的目标组,并注销所有 过时的 IP 地址。


ALB 模式部署架构概述:

1) 在这种体系结构中,您的 Neptune 群集至少在两个可用区中的两个子网中运行,每

个子网都在不同的可用区中。

2) Neptune DB 子网组在两个可用区中至少跨越两个子网。

3) 来自外部客户端的 Web 连接在公共子网中的 Application Load Balancer 上终止。

4) 负载平衡器将请求转发到在 EC2 实例上运行的 HAProxy。 此 EC2 实例注册在属于

ALB 的目标组中。

5) HAProxy 配置有 Neptune 群集终结点 DNS 和端口。 来自 ALB 的请求将转发到数据

库集群中的主实例。


1.4.2 应用部署架构-无服务器模式

https://github.com/aws-samples/aws-dbs-refarch-graph/tree/master/src/accessing-from- aws-lambda

Amazon API Gateway 与 AWS Lambda 模式部署架构概述:

1) 在这种体系结构中,您的 Neptune 群集至少在两个可用区中的两个子网中运行,每

个子网都在不同的可用区中。通过在至少两个可用区中分布集群实例,可以帮助确

保在可用性区发生故障的极少数情况下数据库集群中有可用实例。

2) Neptune 的 VPC 安全组配置为允许从 Neptune 群集端口上的 AWS Lambda 安全组进

行访问。

3) AWS Lambda 配置为访问您的 VPC 中的资源。这样,Lambda 可以创建弹性网络接口

(ENI),使您的功能可以安全地连接到 Neptune。

4) Lambda VPC 配置信息包括至少 2 个专用子网,从而允许 Lambda 以高可用性模式运

行。

5) 允许 Lambda 使用的 VPC 安全组通过 Neptune VPC 安全组上的入站规则访问 Neptune。

6) 在 Lambda 函数中运行的代码使用 Gremlin 或 SPARQL 客户端将查询提交给 Neptune

群集的群集,读取器和/或实例端点。

7) API Gateway 公开了接受客户端请求并执行后端 Lambda 函数的 API 操作。


1.4.3 应用部署架构-Kinesis Data Stream 模式

https://github.com/aws-samples/aws-dbs-refarch-graph/tree/master/src/writing-from- amazon-kinesis-data-streams

Amazon Kinesis Data Stream 模式部署架构概述:

1) 在这种体系结构中,您的 Neptune 群集至少在两个可用区中的两个子网中运行,每

个子网都在不同的可用区中。通过在至少两个可用区中分布集群实例,可以帮助确

保在可用性区发生故障的极少数情况下数据库集群中有可用实例。

2) 提供 Kinesis 数据流以接受来自客户端应用程序的写入请求,该客户端应用程序充当

记录生产者。

3) 客户端可以使用 Amazon Kinesis Data Streams API 或 Kinesis Agent 将单个记录写入数

据流。

4) AWS Lambda 函数处理数据流中的记录。创建 Lambda 函数和事件源映射。事件源映

射告诉 Lambda 将数据流中的记录发送到 Lambda 函数,该函数使用 Gremlin 或

SPARQL 客户端向 Neptune 集群端点提交写请求。

5) Lambda 函数将批处理写入 Neptune。每个批处理都在单个事务的上下文中执行。

6) 为了提高该函数处理记录的速度,请将分片添加到数据流中。 Lambda 按顺序处理每个分片中的记录,如果函数返回错误,则停止处理分片中的其他记录。


第 2 章 实验操作指南

本实验将通过 AWS CloudFormation 的方式对实验环境进行自动化部署,主要会使 用到 AWS IAM、Amazon VPC、Amazon EC2、Amazon S3、Amazon Neptune、Amazon SageMaker 这些服务,虽然不要求学员掌握所有服务的使用技能,但最好具有一定的 AWS 云服务使用经验。具体的实验架构参考下:

2.1 初始环境安装

  1. 使用中国区帐号的学员,请选择宁夏区域,CloudFormation 地址如下:

https://cn-northwest-1-migration.s3.cn-northwest-1.amazonaws.com.cn/neptune-full-stack- nested-template.json

  1. 使用 Global 帐号的学员,请选择东京区域,CloudFormation 地址如下:

https://ap-northeast-1-migration.s3-ap-northeast-1.amazonaws.com/neptune-full-stack- nested-template.json

  1. 请提前设置好用户权限和 EC2 的密钥对,CloudFormation 模板操作视频如下:

https://cn-northwest-1-migration.s3.cn-northwest-1.amazonaws.com.cn/Neptune-CFN.mov


2.1.1 运行 CloudFormation 模板

1) 在控制台上选择 CloudFormation 服务,点击“创建堆栈”


2) 将 CloudFormation 地址复制过来,点击“下一步”

3) 请意红色方框里面的输入内容,其他内容都可以默认,点击“下一步”


继续“下一步”


4) 请意红色方框里面的选择内容,点击“创建堆栈”


5) 请意红色方框里面的内容,如果中断请检查 CloudFormation 的日志

6) 整个创建过程大约需要 10 分钟,直接点击主模板查看相关的输出参数

7) DBClusterEndpoint 是 Amazon Neptune 集群的访问入口,请直接复制出来

特别说明:由于运行中关联到的服务众多,请提前确保自己的帐号有足够的权限去运行 CloudFormation 模板,该模板会引用另外三个模板去创建所有资源,如遇出错,请检查相应的断点 位置,再去推导可能出错的原因。


2.1.2 配置 Amazon SageMaker

在 Amazon SageMaker 中主要需要配置 Neptune 集群的访问入口。在 AWS Console

打开 SageMaker,具体显示如下,请点击“打开 Jupyter”

1) 请点击右上角的“New”->“Terminal”打开终端窗口

2) 直接 vi 编辑 graphnotebookconfig.json 配置文件,把 host 的内容更改 Neptune 的 DBClusterEndpoint

3) 关闭终端窗口,退回到笔记实例界面

2.1.3 验证安装

1) 请点击“打开 Jupyter”

2) 再点击 Neptune 目录,再点击 01-About-the-Neptune-Notebook.ipynb,打开如下界面:

3) 拉到如下位置,选中 %status 框,再点击菜单栏的“Run”

4) 如果运行正常,将会显示如下信息(集群状态、版本等等)

2.2 SPARQL 与 Gremlin 基本练习

目前有关 Amazon SageMaker 操作 Amazon Neptune 的文档还未正式发布,大家可 以按 SageMaker Jupyter Notebook 文档指定的内容进行练习。

2.2.1 SPARQL on Jupyter Notebook 练习

2.2.2 Gremlin on Jupyter Notebook 练习

2.2.3 SPARQL on Console/Workbench 练习(可选)

https://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/access-graph-sparql-rdf4j- console.html

初始环境在 CloudFormation 都已经安装配置好 eclipse-rdf4j-3.2.0-sdk

可以直接通过 ec2-user 用户,SSH 到 EC2,按照文档操作即可。

### 进入 Console


eclipse-rdf4j-3.2.0/bin/console.sh
复制代码


进入 Workbench

可以自行配置 Apache Tomcat 9.0,按 CloudFormation 模板的输出提示做 SSH 隧道访问即 可

http://localhost:8080/rdf4j-workbench/


2.2.4 Gremlin on Console 练习(可选)

https://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/get-started-graph- gremlin.html

初始环境在 CloudFormation 都已经安装配置好 apache-tinkerpop-gremlin-console 可以直接通过 ec2-user 用户,SSH 到 EC2,按照文档操作即可。

进入 Console


apache-tinkerpop-gremlin-console-3.4.6/bin/gremlin.sh
复制代码


2.3 实验环境清理



附录

  • Amazon Neptune 文档中心

https://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/intro.html

  • Amazon Neptune CLI 指南

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/neptune/index.html

  • Amazon Neptune 开发者资源

https://aws.amazon.com/cn/neptune/developer-resources/

  • Amazon Neptune 参考架构

https://github.com/aws-samples/aws-dbs-refarch-graph

  • Amazon Neptune 参考样例

https://github.com/aws-samples/amazon-neptune-samples

  • Amazon Neptune 数据导入

https://github.com/awslabs/amazon-neptune-tools

  • Migrating a Neo4j graph database to Amazon Neptune

https://aws.amazon.com/cn/blogs/database/migrating-a-neo4j-graph-database-to- amazon-neptune-with-a-fully-automated-utility/

  • Cypher for Gremlin adds Cypher support to any Gremlin graph database.

https://github.com/opencypher/cypher-for-gremlin

  • SQL2Gremlin

http://sql2gremlin.com/

  • PRACTICAL GREMLIN: An Apache TinkerPop Tutoria

http://www.kelvinlawrence.net/book/Gremlin-Graph-Guide.html


发布于: 2020 年 11 月 01 日阅读数: 62
用户头像

John(易筋)

关注

问渠那得清如许?为有源头活水来 2018.07.17 加入

工作10+年,架构师,曾经阿里巴巴资深无线开发,汇丰银行架构师/专家。擅长架构、算法、数据结构、设计模式、iOS、Java Spring Boot。易筋为阿里巴巴花名。

评论

发布
暂无评论
链表实现插入排序、机器学习Top 10 算法、图数据库实战Neptune、John 易筋 ARTS 打卡 Week 24