带有 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 性能接近线性。


相关文章
|
8月前
|
数据采集 JavaScript API
第三方系统访问微搭低代码的后端API
第三方系统访问微搭低代码的后端API
|
存储 JSON 小程序
零基础入门低代码后端开发,只需几行代码就可以操作数据库
零基础入门低代码后端开发,只需几行代码就可以操作数据库
零基础入门低代码后端开发,只需几行代码就可以操作数据库
|
SQL 存储 JSON
开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
低代码后端 rxModels 的设计开发分享。如果自己开发一个低代码后端,通过该文章,可以借鉴一些设计思路,少踩一点坑。
1543 0
开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
|
1月前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
57 4
|
10天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
108 18
|
22天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
69 3
|
1月前
|
存储 前端开发 Java
深入理解后端开发:从基础到高级
本文将带你走进后端开发的神秘世界,从基础概念到高级应用,一步步揭示后端开发的全貌。我们将通过代码示例,让你更好地理解和掌握后端开发的核心技能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
2月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
1月前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
1月前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
44 1

热门文章

最新文章

下一篇
开通oss服务