用Node.js从头开始构建编写数据库

作者 : IT 大叔 本文共3411个字,预计阅读时间需要9分钟 发布时间: 2020-08-6

我们选择在Node中构建数据库的主要原因(也是最简单的原因)是因为我们非常了解它。我们由于没有选择Go而感到惊讶,但是现在人们接受了Go和Node本质上是并驾齐驱的。我们的联合创始人之一扎克(Zach)认识到,随着时间的流逝,学习一种新的语言将永远是不值得的。

Node.js中构建数据库的优点

  • 我们已经知道Node.js
  • 轻巧的
  • 快速发展
  • 高度可扩展
  • npm

HarperDB团队具有大规模软件开发的背景。我们数据库的最初目标是创建一个工具,使开发人员可以专注于编码,而不必花费时间和精力进行数据库维护,同时仍提供强大的解决方案。我们希望人们对使用的产品感到舒适和自信。我们的团队在Node以外的语言方面拥有丰富的经验,但是我们在其中编程方面取得了巨大的成功。(尽管来自Java,Stephen最初认为Node很可怕,但是大约90天后,他学会了爱它)。Node是轻量级的,它使我们能够快速发展,npm具有令人难以置信的软件包。

在Node.js中建立资料库的缺点

  • 当时不被接受为“企业级语言”
  • 没有对操作系统/文件系统的直接控制
  • 不如C / C ++
  • 没有本机线程(现在有)

我们确实遇到了一些麻烦...作为第一个用Node.js编写的数据库,我们没有选择跟随任何人的脚步。我们可能是Node内置的首批企业产品之一,至少是最以数据为中心的产品。人们对此表示质疑。一个人告诉史蒂芬,他宁愿用勺子掏出自己的心,也不愿在Node.js中编程数据库。现在人们已经意识到这是一个好主意,因为我们在产品中拥有了所有这些令人难以置信的功能,这些功能我们不需要构建,并且这些功能在我们的工作中是固有的。在没有直接控制文件系统中的OS方面,我们确实遇到了挑战。同样,C / C ++速度更快,但是可能更复杂,并且不一定像水平扩展一样。这实际上取决于您要查找垂直还是水平计算。

科技栈

用Node.js从头开始构建编写数据库插图
这就是我们的技术堆栈。我们认为我们的Management Studio是HarperDB堆栈的一部分,并且是在React中通过Node后端构建的。绿色框表示在HarperDB之上构建的任何应用程序,例如,我们的Node-RED节点可用于构建自定义工作流程。HarperDB技术完全构建在Node.js中,它包含我们的接口和HarperDB核心。

我们的产品以REST API的形式呈现,它实际上是一个Express应用程序,它是您与HarperDB进行交互的主要接口。我们的NoSQL解析器是我们内部构建的自定义解决方案。我们将AlaSQL用于我们的SQL解析功能,您可以在此处了解更多信息,此外,我们还使用自定义代码扩展了它们的功能,这是一个很棒的用于解析SQL的npm软件包。我们提供由我们的合作伙伴构建的驱动程序,例如ODBC和JDBC。最后,我们将使用SocketCluster进行分布式计算和集群化,我们的CTO将在几周后进行介绍

HarperDB核心技术包含“秘密调味料”。这使我们能够在没有数据重复的情况下被完全索引,并为单个数据模型提供各种接口选项。在核心内,实现了许多npm软件包以扩展我们的功能。

最后,我们为存储介质提供了多种选择。默认情况下,我们捆绑LMDB,因为它与其他选项相比可提供显着的性能提升。HarperDB核心包含可扩展的代码,使我们可以在将来添加其他存储介质选项。

REST API

  • HarperDB是一组微服务
  • 单一端点
  • 所有操作均已过帐
  • 无状态/ RESTful

用Node.js从头开始构建编写数据库插图(2)

(示例代码位于https://docs.harperdb.io/

在以前的公司中,我们的团队解决了数百个具有不同端点的API的头痛问题,这简直太疯狂了。人们可能会认为HarperDB只是一个端点很奇怪,但是如果您查看代码的主体,对于您执行的每一项操作,您需要更改的只是主体,前几行。这非常简单,在编写基于REST的应用程序时,您可以使其变得非常简单。您可以从我们这里获取并在任何应用程序中使用!基本上,您将一条消息发布到API,我们将看到您正在执行的操作,并使用一组标准的方法对其进行处理。在过去的几年中,我们已经重写了很多应用程序,但是这一部分几乎保持不变。

管理工作室

  • 基于HarperDB REST API构建
  • React Native编写
  • 允许通过GUI控制HarperDB实例

用Node.js从头开始构建编写数据库插图(4)

HarperDB Management Studio是在我们的微服务之上构建的React前端(因此,我们可以吃自己的狗食)。关于JavaScript的一件令人敬畏的事情是它的轻巧程度,无论您使用什么框架(Node,React等),您都可以轻松地将这些不同的层耦合在一起。React令人惊叹,它改变了前端开发的质量,并允许我们使应用程序更易于访问。通过在此基础上构建,我们还将同时测试我们自己的API-这使其真正强大。产品副总裁Jaxon为Studio选择了React,而Stephen在Express中撰写了我们的后端报告。

AlaSQL

我们选择AlaSQL作为HarperDB的后端功能,它具有一些我们没有的好东西,并且允许我们连接Math.js和GeoJSON之类的东西,因此它是一个令人难以置信的软件包。对这种语言使用Node的一个惊人好处是随着技术的发展,您想要和需要的大多数很酷的东西都在npm上。如果必须构建自己的SQL解析器,我们可能仍会构建HarperDB。我们的竞争对手之一FaunaDB大约花了4年才进入市场,但是我们在6个月内发布了该产品的Beta版,在12个月内发布了其原始版本,而我们几个月前才发布了我们的云产品(大约3年后)。我们并不是说我们是天才,而是通过在Node中进行开发,我们得以站在像AlaSQL开发人员这样的人的肩膀上,这使npm社区感到惊奇。

Maths.js

  • HarperDB在我们的SQL中使用math.js函数
  • 允许增强数学功能,同时利用npm社区的功能

Maths.js是另一个不可思议的软件包,用于处理平均值,数据科学等问题,我们将其连接到SQL功能中。与AlaSQL结合使用并不难,而且功能非常强大。

集群/复制

  • 建立在SocketCluster.io上
  • 容错
  • 点对点
  • 表级复制
  • 全局共享架构
  • 分布式计算

用Node.js从头开始构建编写数据库插图(6)用Node.js从头开始构建编写数据库插图(8)

在Node.js中构建内容的另一个非常酷的功能是,它本质上是无状态的,这意味着它不需要在内存中保存对跨会话服务客户端至关重要的数据,这非常节省资源。大多数企业级应用程序都有后台流程和有状态变量,它们可能变得非常不稳定。Node是无状态的,专为Web设计,可水平扩展并实现点对点。使用Node框架的一个惊人好处是,我们能够连接SocketCluster来为我们的集群和复制提供动力。HarperDB使用简单的pub-sub模型,因此我们通过将数据发布到不同的聊天室中来复制数据,这些聊天室的不同节点订阅了这些聊天室,并且可以水平分布。与其他语言相比,节点可以水平扩展且资源占用较少,通过将Node放置在许多计算机上(水平扩展),您可以使该框架更加强大,同时降低成本,简化开发并成为一个很棒的社区的一部分。

LMDB和文件系统

  • 最初在文件系统上构建了爆炸数据模型
  • 由于生成许多文件占用了索引节点和过多的磁盘空间,因此出现了问题
  • 在LMDB上重建数据模型
  • 大量的性能提升

用Node.js从头开始构建编写数据库插图(10)

最初,我们直接将文件系统与上述HarperDB数据模型一起使用,这就是使该产品独特的原因。随着数据的传入,我们将其映射到我们的数据模型,而不是SQL引擎或NoSQL引擎。我们将数据分解为单独的属性,并将其存储在文件系统上的文件夹结构中。我们以原子方式存储每件事,您可以通过SQL和NoSQL查询。我们确实遇到了一些挑战,所以最近我们连接了一个名为LMDB的软件包,这是我们赖以生存的关键价值存储。在此基础上,我们能够实现精确的数据模型,并且提供了令人难以置信的性能提升。在最近的基准测试中,我们的速度比MongoDB快37倍,这在很大程度上要归功于LMDB。

再次,通过利用惊人的Node社区,我们可以专注于我们擅长的领域。

您现在也许可以告诉我们我们爱Node。希望这对您有所帮助,并且您在这里学到了一些东西,或者只是激发了您对Node.js的热爱。我们很想听听您的意见,如果您不同意,我们随时乐意辩论! 🙂

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 用Node.js从头开始构建编写数据库

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论