带有 Nucleoid 的数据存储(低代码后端)

简介: 带有 Nucleoid 的数据存储(低代码后端)

Nucleoid是一个低代码框架,它跟踪 JavaScript 中的给定语句,并在图中创建变量、对象和函数等之间的关系。因此,就像在 Node.js 中编写任何其他代码一样,运行时通过管理 JS 状态以及存储在内置数据存储中,将您的业务逻辑转换为完全工作的应用程序,这样您的应用程序就不需要外部数据库或其他任何东西。

const nucleoid = require("nucleoidjs");
const app = nucleoid();
class Item {
  constructor(name, barcode) {
    this.name = name;
    this.barcode = barcode;
  }
}
nucleoid.register(Item);
// 👍 Only needed a business logic and 💖
// "Create an item with given name and barcode,
// but the barcode must be unique"
app.post("/items", (req) => {
  const barcode = req.body.barcode;
  const check = Item.find((i) => i.barcode === barcode);
  if (check) {
    throw "DUPLICATE_BARCODE";
  }
  return new Item(name, barcode);
});
app.listen(3000);
复制代码

差不多就是这样,多亏了 Nucleoid 运行时,只有这个👆,你才成功地用业务逻辑持久化了你的第一个对象😎

什么是链上数据存储?

Nucleoid 项目的一个重要目标是在同一运行时下组合逻辑和数据。Nucleoid 有一个内置的链上数据存储,通过区块链风格的加密来保存后续交易。每个事务都按顺序相互加密,数据存储将这些哈希值保存在托管文件中。每笔交易都在亚毫秒内完成,哈希值的任何变化都会抛出错误,从而保证对象的最终状态,并且如果没有有序的哈希值和初始密钥,对象将不可见。

对运行时的每次调用都被视为一个事务,即使它包含多个语句,如果抛出错误,它也会回滚该事务。

nucleoid.run(() => {
  a = 1;
  b = a + 2;
  c = b + 3;
});
复制代码

运行时返回这样的东西;结果(如果有的话)、时间戳和交易哈希。

{
  "date": 1672179318252,
  "time": 1,
  "hash": "d3af6bdae8e8ff1eeb1f0f1ea8aaf02e:8b23f8ec493a16cee484f44a6e09a543a62b5e535b8c16ad5f8484766eed686d"
}
复制代码

重要的不同是链上数据存储不存储值,而是像 CQRS、Event Store 等中那样持久化事务,并且预计运行时会在内存中建立值。该算法提供了具有更大空间复杂度的快速读取和快速写入,并且需要在启动时在内存中计算值作为权衡。

例如,此表作为事务的一部分构建在内存中:

内存中的值

状态
var a 1个
var b 3个
var c 6个

数据存储中的事务

但实际的数据存储看起来像这样👇(虽然这是解码的交易对象):

{ "s": "var a = 1" ... }
{ "s": "var b = a + 2" ... }
{ "s": "var c = b + 3" ... }
复制代码

哈希是如何生成的?

运行时使用硬编码的创世令牌作为链中的第一个哈希。当它收到更多交易时,数据存储使用先前的哈希以及密钥来生成链中的下一个哈希。它使用带有可配置算法的 Node.js 内置加密包。

托管文件中的链上数据示例~/.nuc/data/

ff2024a65a339abd3c77bb069da38717:10812ca4ed497e3167684f9b0316b5cf72992adffd9ed8bd97e08f321e117daf367b012
a1a521479a43e1b16ce0ecc1671fbd8d:1ceb5211efadecc791c22a010752ecdf626764a71c4bc80c74f9d3ba6adb88d2e7cedcf
20033f1556383ce5b911436aa76381a8:543a50ae5072aa64acb0ef7c307aa53f3aaea042023704362305bedfafd721c9f918740
ee8a894958d4bb372d1a9e63335ccee7:4834d1e04e6b234135ae896c0057186df4c820b9b25fa6ce153e03f89c63b905208ba07
dc2d6d47071db41845fa8631b131bef5:0ec5427dd957ccb46fbd6884290eb0de9696102405fc606d2acf56e059ed3e827610e6a
3ef42a5927c4e231f17323619d6a60d1:e793031d12c9e5b10708c62d49a56c77fd9ef463606609036d22af83490106c213224e5
3a016c3e71238462f8b42ebb733e5856:cb1595d06424c7e1ec3c353f5eee2d6cf1b804306dcdadb09a6be9a066b89581270464d
复制代码

可扩展性

Nucleoid 遵循单线程多进程范例。分片处理程序采用 JavaScript 函数并允许开发人员创建自己的可扩展性策略。该函数接收额外的数据,如请求标头、正文等,它还带有 Nucleoid 运行时以及内置数据存储,因此分片函数可以持久保存用户数据,以便memtable像 Cassandra 一样支持。

npx nucleoidjs start --cluster
复制代码

npx命令启动专门的 Nucleoid 实例,并充当集群的前门。默认的分片功能Process从 REST 中获取标头并在进程列表中查找 IP 和端口信息,并且可以使用调用终端添加集群实例process1 = new Process("127.0.0.1", 8448)

可以通过在函数中包含函数~/.nuc/handlers/cluster.js并从函数返回进程 ID 来更改默认函数。例如:

// cluster.js
const jwt = require("jsonwebtoken");
function run(req, fn) {
  const bearer = req.headers["authorization"];
  const token = bearer.split();
  const decoded = jwt.verify(token, "secret");
  return decoded.company_id; // This returns company id as a process id
}
module.export = run;
复制代码

基准

这是我们在 Nucleoid IDE 中使用 Express.js 和 Sequelize 库的示例订单应用程序与 MySQL 和 Postgres 的比较。

nucleoid.com/ide/sample

网络异常,图片无法展示
|

性能基准在 AWS EC2 实例的 t2.micro 中运行,两个数据库都有没有索引和默认配置的专用服务器。对于平均复杂度的应用程序,由于链上数据存储、内存计算模型以及限制 IO 过程,Nucleoid 性能接近线性。


相关文章
|
6月前
|
数据采集 JavaScript API
第三方系统访问微搭低代码的后端API
第三方系统访问微搭低代码的后端API
|
存储 JSON 小程序
零基础入门低代码后端开发,只需几行代码就可以操作数据库
零基础入门低代码后端开发,只需几行代码就可以操作数据库
零基础入门低代码后端开发,只需几行代码就可以操作数据库
|
SQL 存储 JSON
开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
低代码后端 rxModels 的设计开发分享。如果自己开发一个低代码后端,通过该文章,可以借鉴一些设计思路,少踩一点坑。
1520 0
开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
|
2天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
13 1
|
12天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
6天前
|
JSON API 开发者
构建高效API:后端开发中的RESTful最佳实践####
在数字化时代,API作为不同系统间通信的桥梁,其重要性日益凸显。本文将深入探讨RESTful API的设计原则与最佳实践,通过实际案例分析,揭示如何构建高效、可维护且易于使用的API接口,助力后端开发者提升项目质量与用户体验。 ####
|
7天前
|
JSON 缓存 API
探索后端开发中的RESTful API设计原则
【10月更文挑战第41天】在后端开发的广阔天地中,API的设计如同绘制一幅精细的地图,指引着数据的流向和前端的交互。本文将带你走进RESTful API的世界,一起探索如何用简洁高效的设计原则来构建一个清晰、可维护且易于理解的API结构。我们将从RESTful API的基础概念出发,通过实际案例分析,揭示如何在实践中应用这些设计原则,并讨论如何在复杂的业务逻辑中保持API的简洁性和一致性。
|
11天前
|
JSON 前端开发 API
后端开发中的API设计与文档编写指南####
本文探讨了后端开发中API设计的重要性,并详细阐述了如何编写高效、可维护的API接口。通过实际案例分析,文章强调了清晰的API设计对于前后端分离项目的关键作用,以及良好的文档习惯如何促进团队协作和提升开发效率。 ####
|
13天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
31 4
|
12天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。

热门文章

最新文章

下一篇
无影云桌面