区块链项目数据存储系统分析

2023-11-11

 

前言

一、区块链简介:

二、数据存储:

1 比特币(Bitcoin)

2 以太坊

3 Hyperledger Fabric

4 EOS(Enterprise Operation System)

4.1 IPFS

4.2 EOS存储的设计

5 The Libra Blockchain存储模块 Storage

5.1 账本历史

5.2账本状态

5.3 事务(Transactions)

5.4 经验证的数据结构和存储

5.5 性能

6 FISCO BCOS 2.0

总结:


转载:前言引自 http://mini.eastday.com/bdmip/180412111636715.html#

           各区块链底层数据存储分析(1和2) https://blog.51cto.com/13501774/2050073

           区块链:比特币数据存储 https://www.oxysun.cn/blockchain/bitcoin-data-storage.html

EOS是什么?与比特币、以太坊有何区别? https://www.jinse.com/news/bitcoin/418762.html

深度带你走进EOS的存储系统  http://www.qukuaiwang.com.cn/news/134882.html

EOS存储系统介绍 https://www.jianshu.com/p/307c99d9ae47

The Libra Blockchain机翻及整理 http://www.manongjc.com/detail/7-kjssjoccmowymny.html

FISCO BCOS 技术文档 https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/index.html

FISCO BCOS 2.0原理解析篇2: 分布式存储架构设计 https://mp.weixin.qq.com/s/vDbA5VfdtHoF4-RuJhyfgg?utm_source=wechat_session&utm_medium=social&utm_oi=617005212758577152


前言

目前,区块链项目众多,酋长根据区块链产业链,将主要项目归为五大类,即数字资产、全球支付、金融、平台应用和底层技术。本文的主要目的就是分析当前主要流行的区块链的存储技术以及他们之间的不同。

 

一、区块链简介:

区块链(英语:blockchain 或 block chain)是用分布式数据库识别、传播和记载信息的智能化对等网络, 也称为价值互联网。中本聪于2008年在《比特币白皮书》中提出“区块链”概念,并在2009年创立了比特币社会网络,开发出第一个区块,即“创世区块”。区块链包含一张被称为区块的列表,有着持续增长并且排列整齐的记录。每个区块都包含一个时间戳和一个与前一区块的链接,这样设计区块链使得数据不可篡改,一旦记录下来,在一个区块中的数据将不可逆。其数据结构大致如下:

【干货】各区块链底层数据存储分析(一)

 

二、数据存储:

 

1 比特币(Bitcoin)

比特币(英语:Bitcoin)是一种去中心化、全球通用、不需第三方机构或个人,基于区块链作为支付技术的电子加密货币。它由中本聪于2009年1月3日,基于无国界的对等网络,用共识主动性开源软件发明创立,是加密货币及区块链的始祖,也是目前知名度与市场总值最高的加密货币。

比特币存储系统由普通文件和 kv 数据库(levelDB)组成。普通文件用于存储区块链数据,kv 数据库用于存储区块链元数据。

用于存储区块链数据普通文件以 blk00000.dat , blk00001.dat 文件名格式组成,使用网络格式,直接存储在磁盘上。他们仅仅被用于:一个钱包重新扫描丢失的交易,重新组织去区块链的一部分,给另外的节点进行同步提供区块数据。如下图所示,其中 index 目录存储用于存储区块元数据,这是一个LevelDB数据库,包含了所有知道的区块的元数据,和在磁盘的哪里可以找到它们。

为了快速检索区块数据每个文件的大小是128 M Bytes。每个区块的数据(区块头和区块里的所有交易)都会序列成字节码的形式写入 dat 文件中。在序列化的过程中,如果检测到当前写入文件尺寸加上区块尺寸大于 128 M Bytes,则会重新生成一个 dat 文件。具体的序列化过程如下所述:

  • 获取当前 dat 文件大小 npos,并将区块大小追加写入至 dat 文件中
  • 序列化区块数据和区块中的交易数据,并将序列化的数据追加至 dat 文件中。
  • 在写入数据的过程中,会生成区块和交易相关的元数据。

区块的元数据格式如 <blockHash,xxxxx+npos> 格式, 其中 xxxxx 为 dat 文件序号,npos 为区块写入 dat 文件的起始位置。

交易的元数据格式如 <txHash, xxxxx+npos+nTxOffset> 格式, 其中 xxxxx、npos 和上面的描述一致,nTxOffset 为写入 dat 文件的起始位置(基于npos 位置)。上述所有元数据都将写入 kv 数据库中,其中blockhash/txHash将作为后续查询具体数据在 dat 文件中的索引使用。

综上所述,在获取链数据的时候只需传入区哈希或是交易哈希,就能很容易的定位到区块数据或是交易数据

补充:chainstate/* :这是一个levelDB数据库,以压缩的形式存储所有当前未花费的交易输出(UTXO)以及关于这些交易来源的一些元数据。这里的数据对于验证新传入的块和交易是必要的。这些数据理论上可以从区块数据中重建(参看-reindex 命令选项),但是这需要花费很长时间。没有这些数据,理论上你也可以进行验证,但是它意味着一个全面地对区块 (2013年5月已经达到7GB ) 的扫描,来检查每一笔输出是否被花费。

blocks/rev*.dat :包含着“undo”数据。你可以把区块数据看成是区块链状态(它们消费一些未花费的输出,然后产生新的一些)的补丁,可以把这些undo数据看做是反向的补丁。它们对于回滚区块状态非常重要,而回滚对于重新组织构建这种情况又是非常重要的。

 

2 以太坊

以太坊是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称为「以太币」)提供去中心化的虚拟机(称为「以太虚拟机」Ethereum Virtual Machine)来处理点对点合约。

以太坊的区块主要由区块头和交易组成区块在存储的过程中分别将区块头和交易体经过 RLP 编码后存入至 KV 数据当中。以太坊在数据存储的过程中,每个 value 对应的key 都有相对应的前缀,不同类型的 value 对应不同的前缀

区块交易体的存储过程如下:

  1. 将区块中的交易数据和叔块头信息进行 RLP 编码从而生成存储值value;
  2. 将数据类型前缀,编码后的区块高度和区块哈希拼接生成 key;
  3. 将<key, value>存储至db数据库中。

区块的信息可以通过区块哈希和区块高度进行检索,其存储过程如下:

  1. 将区块头信息进行 RLP 编码从而生成存储值 value
  2. 将区块高度进行编码(转发成大端格式数据)生成encNum
  3. 将数据类型前缀 (headerPrefix) 和 encNum 生成以区块高度为检索信息的 key
  4. 将存储至db数据库中,从而生成以区块高度为检索的信息
  5. 将数据类型前缀(blockHashPrefix)和区块哈希生成以区块哈希为检索信息的key
  6. 将存储至db数据库中,从生成区块哈希为检索的信息

在数据查询的时候,应用层只需要提供交易 hash、区块高度和区块哈希就能得到交易 key,从而查询到相关的交易信息。

 

3 Hyperledger Fabric

Hyperledger fabric (HLF)是由Linux基金会主导推广的区块链开源项目。在Hyperledger Fabric的基础上又衍生出了其他一些相关的项目。HyperLedger项目汇集了金融、银行、物联网、供应链、制造等各界开发人员的心血。目的是为了打造一个跨领域的区块链用。

HLF 的存储系统和比特币一样,也是由普通的文件和 kv 的数据库(levelDB/couchDB)组成。在 HLF 中,每个 channel 对应一个账本目录,在账本目录中由 blockfile_000000、blockfile_000001 命名格式的文件名组成。为了快速检索区块数据每个文件的大小是64 M(比特币:128M) Bytes。每个区块的数据(区块头和区块里的所有交易)都会序列成字节码的形式写入 blockfile 文件中。

HLF存储区块数据的文件名格式如图所示:

ååºåé¾åºå±æ°æ®å­å¨åæï¼äºï¼

HLF检索信息文件如图所示:

ååºåé¾åºå±æ°æ®å­å¨åæï¼äºï¼

在序列化的过程中,程序以 append 方式打开 blockfile 文件,然后将区块大小和和区块数据写入至 blockfile 文件中。以下是区块数据写入的具体描述:

  1. 写入区块头数据,依次写入的数据为区块高度、交易哈希和前一个区块哈希;
  2. 写入交易数据,依次写入的数据为区块包含交易总量和每笔交易详细数据;
  3. 写入区块的Metadata 数据,依次写入的数据为 Metadata 数据总量和每个 Metadata 项的数据详细信息。

在写入数据的过程中会以 kv 的形式保存区块和交易在 blockfile 文件中的索引信息,以方便 HLF 的快速查询。

HLF 区块索引信息格式在 kv 数据库中存储的最终的 LevelKey 值有前缀标志和区块 hash 组成,而 LevelValue 的值由区块高度,区块 hash,本地文件信息(文件名,文件偏移等信息),每个交易在文件中的偏移列表和区块的 MetaData 组成HLF 按照特定的编码方式将上述的信息拼接成 db 数据库中的 value

HLF交易索引信息格式在kv数据库中存储最终的LevelKey值由channel_name,chaincode_name和chaincode中的key值组合而成:
LevelKey = channel_name + []byte + chaincode_name + []byte + key LevelValue 的值由BlockNum 区块号,TxNum 交易在区块中的编号组成, HLF 通过将区块号和交易编号按照特定的方式编码,然后与 chaincode 中的 value 相互拼接最终生成 db 数据库中的 value

 

4 EOS(Enterprise Operation System)

EOS 是由 Block.one 公司开发的一个新的区块链软件系统,它的目标是将一切去中心化(decentralize everything)。从 2017 年年中开始,经过一年的代币众筹后,它于 2018 年 6 月 15 通过由数十个区块生产者(block producer,BP,又称超级节点)组成的社区上线了主网,EOS 主网这条主要的区块链开始正式运转。

图片来自金色财经
图片来自 金色财经 

 

EOS存储使用基于EOS发行的token TOK激励区块生产者保证存储的可访问性和带宽。4.1

4.1 IPFS

IPFS是一种去中心化的文件系统,它将文件名和文件内容强关联起来(文件名是文件内容的hash)。

  • 相同文件内容的文件其名称也一定相同。
  • 当你下载一个文件的时候可以通过文件名来校验文件的完整性。
  • IPFS提供了一个p2p的网络传输层用于终端之间基于文件名称发现和分享文件。

但是IPFS并不提供和保证文件的存储、托管和带宽。也就是说即使能有文件名,但是有可能找不到对应的文件内容,例如,文件被删除或者远程节点拒绝访问等等。所以,需要有一套完善的激励机制鼓励服务器节点提供稳定高效的存储服务。IPFS团队为了解决这个问题,发布了FileCoin区块链,使用区块链的支付系统来激励拥有剩余存储空间的人帮助提供稳定可靠文件的存储、托管和带宽,用户需要为每次上传和下载文件支付一定的费用给服务器节点。

4.2 EOS存储的设计

首先设计了一套文件系统智能合约,发行了一种 token 叫TOK。它允许每个用户定义一个目录结构,这个目录结构下面的所有文件都链接了一个IPFS文件,链接内容主要包括本地home目录路径、文件名(文件内容的hash值)、文件大小。也就是说TOK只存储IPFS的文件链接和一个人类可读的文件名。生产者节点负责保存文件实际的数据,而客户端节点本地只保存文件的地址,所有客户端节点可以通过地址远程访问文件内容。这样可以为客户端节点节约大量的存储开销。

                        

用户通过签名一个交易创建一个指向IPFS文件的链接,并将该交易广播的区块链。这个交易包含了用户的home目录和相应的IPFS文件名以及文件大小。同时用户也可以指定文件被存储在哪个TOK 区块生产者上。然后用户将通过标准的restfull api(API由EOS.io定义)上传文件到指定的区块生产者。一旦区块生产者验证文件和文件名匹配,则其会广播交易到整个区块链系统,其他的区块生产会通过IPFS网络复制那个文件。这样用户就成功的上传了一个文件,同时在的home目录下保存了该文件的链接。

 文件上传成功后,当客户端需要下载文件时,只需要将文件名发给生产者服务器,然后,服务器通过IPFS检索到对应的文件发送给客户端即可。一般来说,IPFS文件系统中的文件都是只读的,因为文件内容的细微修改就会导致客户端校验失败。

EOS存储的核心是IPFS,它提供了一个任何人都可以托管文件的去中心化网络,这些文件可以通过地址远程访问。区块生产者实际代表了21个超级节点,每个超级节点需要拥有支持高吞吐EOS交易量的数据中心,可以在全球范围提供文件托管服务,而且只要有至少一个超级节点在线,用户的文件就是可以访问的。

 

5 The Libra Blockchain存储模块 Storage

存储模块为Libra区块链上的所有数据集以及Libra Core内部使用的必要数据提供可靠和高效的持久存储。

存储模块旨在实现下面两个主要目的:

  1. 保留区块链数据,特别是验证方通过共识协议达成一致的交易及其输出。
  2. 为任何查询提供一个带有Merkle证明的响应,该查询要求部分区块链数据。如果客户端获得了正确的root hash,则可以轻松地验证响应的完整性。

Libra 区块链可以被视为Merkle树,包含组件有:账本历史、账本状态、事件

5.1 账本历史

账本历史记录存储已提交和已执行事务的序列,以及它们发出的关联事件。账本历史的目的,是为了记录最近的账本状态是如何被计算的。账本历史中不存在一组事务的概念。共识协议将事务批处理至区块,作为优化并驱动这一共识协议。然而,在逻辑数据模型中,事务按顺序发生,而不会区分哪个区块包含每个事务。

响应客户端查询:验证者可使用账本历史来回答客户端关于以前账本状态、事务和输出的查询。例如,客户端可能会询问有关特定版本的账本状态(例如,在第30个版本的地址x的帐户余额是多少?),或者特定类型事件的历史(例如,Y地址的账户在最后20分钟收到了哪些付款?)。 

审核事务执行:客户端可通过重新执行历史记录中的每个事务Ti,并将计算的账本状态与版本数据库中相应的账本状态Si和事务输出Oi进行比较,来检查账本状态是否正确。此机制允许客户端审计验证者,以确保正确执行事务。

5.2 账本状态

账本状态代表了有关Libra生态系统的基本事实,包括每个用户在给定版本中持有的Libra币的数量。每个验证者必须知道最新版本的账本状态,以便执行新的事务。

Libra协议使用基于帐户的数据模型]对账本状态进行编码。状态被构造为一个键值存储,它将帐户地址键映射到帐户值。账本状态下的账户值是已发布Move资源和模块的集合。这个 Move资源存储数据值,而模块则存储代码。初始帐户集及其状态在创始账本状态中指定。

帐户地址:帐户地址是一个256位的值。要创建新帐户,用户首先为签名方案生成一个新的验证/签名密钥对 (vk, sk),并使用公共验证密钥vk的加密哈希作为帐户地址a = H(vk)。当从现有账户发送的事务调用这个create_account(a) Move指令时,则这个新账户就会在账本状态中创建。这通常发生在一笔事务尝试将Libra发送到尚未创建的地址a的帐户时。

在地址a中创建新帐户后,用户可使用私人签名密钥sk,签署要从该帐户发送的事务。该用户还可以在不更改其地址的情况下,更改用于签署交易的密钥(例如,主动更改密钥或响应密钥可能被盗的情况)。

Libra协议不会将帐户链接到用户的真实身份(即没有KYC)。用户可通过生成多个密钥对来自由创建多个帐户。由同一用户控制的帐户没有固有的相互联系。该方案参照了比特币和以太坊,为用户提供了假名性 (又称半匿名)[19]。

资源值:所谓资源值或资源,是将命名字段绑定到简单值(例如整数或复杂值)的记录。

模块值:所谓模块值或模块,包含声明资源类型和程序的Move字节码(更多细节见第3.4节)。与资源类型一样,模块由声明模块的帐户地址识别。例如,图2中Currency模块的标识符是0x56.Currency。

  • 模块必须在一个帐户中唯一命名
  • 一旦在帐户地址下声明模块,就不能修改或删除它,除非通过硬分叉的方式。

 

5.3 事务(Transactions)

Libra区块链的客户端是通过提交事务来更新账本状态的。从高维度来讲,事务由事务脚本(以Move字节码编写)和事务脚本的参数(例如,接收方帐户地址或要发送的Libra币数量)组成。验证者通过运行脚本及其参数和当前账本状态作为输入来执行事务,以生成完全确定的事务输出。

5.4 经验证的数据结构和存储

存储模块使用 RocksDB 作为其物理存储引擎,RocksDB中的键值对是字节数组,其上有一个包装器来处理键和值的序列化, 此包装器强制执行数据库内外的所有数据都是根据预定义的模式构建的。

实现主要功能的核心模块称为 LibraDB. 使用单个RocksDB实例来存储整个数据集,相关数据被分组到逻辑存储中 — 例如,账本存储,状态存储和交易存储等。

对于表示账本状态的稀疏Merkle树,我们通过使用具有16个子节点的分支节点来优化磁盘布局,这些子节点表示4级子树,而扩展节点表示没有分支的路径。 但是,在计算root hash和证明时,我们仍然会模拟二叉树。 此修改结果证明,比以太坊的Merkle Patricia树生成的证明更短。(我看不出来)

1账本历史结构的根哈希是系统完整状态的验证器,即2由法定人数验证者签署。当事务添加到数据库时,提交到账本历史的验证器将增长(用虚线箭头表示)。账本历史的每个子叶都提交至一个3 TransactionInfo结构。此结构承诺4签署的事务(Ti),5该事务(Ei)期间产生的事件列表,以及6该事务 (Si)执行后的状态。该状态是一颗稀疏Merkle二叉树,其中每个子叶上都有一个7帐户斑点。

5.5 性能

Libra协议还处于原型阶段,预计Libra协议在最初发布时可支持每秒1000笔支付事务,事务提交到确认的最终时间为10秒,许多支付事务将发生在链下进行。

宽带:验证者需要40 Mbps的网络连接来支持每秒1000笔事务

磁盘:如果帐户大小约为4 KB(包括所有形式的开销),从大型服务器供应商那里获得16TB SSD存储的服务器,这将使得验证者可存储40亿个帐户。

6 FISCO BCOS 2.0

FISCO BCOS是一个区块链底层平台,由金融区块链合作联盟(深圳)(以下简称:金链盟)开源工作组以金融业务实践为参考样本,在BCOS开源平台基础上进行模块升级与功能重塑。特点:深度定制的安全可控、适用于金融行业且完全开源。金链盟开源工作组的首批成员包括:微众银行、深证通、腾讯、华为、神州数码、四方精创、博彦科技、越秀金科、亦笔科技等9家单位。

 

 

总结:

综上所述,本文介绍的主要区块链除了 Ripple 使用的关系型数据库存储、检索区块数据外,其他三种类型的区块链都使用 kv 数据库存储区块链的检索信息。在存储、检索数据上,比特币和 Hyperledger Fabric 高度一致,即使用普通文件存储区块数据,使用 kv 数据库存储检索信息;以太坊的区块数据和检索信息都存储至 kv 数据库中,而 Ripple 的区块数据也会存储至 kv 数据库中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链项目数据存储系统分析 的相关文章

  • 六、数据存储

    摘抄自书籍 第一行代码 第六章 数据存储和持久化技术 xff08 侵删 xff09 1 持久化技术 将内存中的瞬时数据保存在存储设备中 xff0c 使其不会丢失 持久化技术提供了一种机制可以让数据在瞬时状态和持久化状态之间切换 2 文件存储
  • Android 数据存储(四)-Room

    目录 一 概述 1 1 描述 1 2 主要部件 二 创建 Room 2 1 添加依赖项 2 2 创建数据实体 2 2 1 设置 tableName or name 属性 2 2 2 设置主键 2 2 3 忽略字段 2 3 创建数据访问对象
  • [架构之路-201]-《软考-系统分析师》- 关键技术 - 结构化分析方法与面向对象分析(分析与设计的区别、pre架构设计、架构前设计)

    目录 前言 一 分析与设计的区别 二 结构化分析方法 2 1 实体关系图 E R 图 名词 2 2 数据流图 数据的流动 1 顶层图 2 逐层分解 2 3 状态转换图 动作 2 4 数据字典 三 面向对象分析方法 3 1 用例模型 3 2
  • PyTorch笔记

    PyTorch快速入门 函数名后面带下划线 的函数会修改Tensor本身 例如 x add y 和x t 会改变 x 但x add y 和x t 返回一个新的Tensor 而x不变 Tensor和numpy对象共享内存 所以他们之间的转换很
  • MySQL数据库设计总结

    阅读原文 更多技术干货 请访问腾云阁 规则1 一般情况可以选择MyISAM存储引擎 如果需要事务支持必须使用InnoDB存储引擎 注意 MyISAM存储引擎 B tree索引有一个很大的限制 参与一个索引的所有字段的长度之和不能超过1000
  • bss段,data段、text段、堆heap和栈stack

    bss段 data段 text段 堆heap和栈stack bss段 data段 text段 堆 heap 栈 stack 例子 在C的学习中 你总避免不了对各类数据的存储区域学习归纳总结 简单的总结 bss存全局和静态变量 data存全局
  • 客户端读写HBase数据库的运行原理

    1 HBase的特点 HBase是一个数据库 与RDMS相比 有以下特点 它不支持SQL 不支持事务 没有表关系 不支持JOIN 有列族 列族下可以有上百个列 单元格 即列值 可以存储多个版本的值 每个版本都有对应时间戳 行键按照字典序升序
  • 系统分析和设计方法之使用UML进行面向对象设计和建模

    使用UML完成系统建模是一件不错的事 不过在权衡进度 成本之后 大体上会知道能不能做 并不是对系统好的事情我们都要完成 重点在于资源约束 此处只是在资源约束满足时 应该怎么处理UML设计的通用流程 在实际工作场景中要根据要求做取舍 这是一篇
  • 使用BPMN和微服务进行编排 ——是好做法还是坏做法?

    马丁 Martin Fowler 在他著名的微服务文章中建议 敏捷的终端和愚笨的管道 他指出 微服务社区赞成另一种方法 敏捷的终端和愚笨的管道 从微服务构建的应用程序旨在尽可能地解耦和衔接 他们拥有自己的域逻辑 而更多地在经典的Unix意义
  • C++模板的使用

    在平时的工作和学习过程中 经常会用到泛型 这里对泛型和模板进行一下梳理 以便理解和使用 模板关键字 template 为什么要使用模板 假如设计一个两个参数的函数 用来求两个对象的乘积 在实践中我们可能需要定义n多个函数 int multi
  • Android数据的四种存储方式

    Android数据的四种存储方式 SharePreferences SQLite Contert Provider File 网络存储 作为一个完整的应用程序 数据存储的操作是必不可少的 Android系统提供了四种存储数据方式 分别为 S
  • Android有线IPV6总结(二):内核中RS与RA的一点学习

    RS Router Solicitation路由器请求 RA Router Advertisement路由器公告 在Android系统中我们想要打开一个网络接口 比如eth0 的ipv6功能 用命令的话我们有如下两种办法 1 echo 0
  • mysql不能使用别名做判断条件的解决方案

    错误例子 select name as n from user where n 张三 报错 n 字段在表user中不存在 解决办法 select name as n from user where name 张三 具体原因 请自行百度
  • 布局数据存储,中国电子云意在何为?

    数据存储市场的未来在哪里 答案毋庸置疑是 云端 著名咨询机构Wikibon曾经做过一项统计 将全球三大云服务商的数据存储营收与传统存储厂商的营收进行对比 发现云服务商的数据存储业务规模已然赶上传统存储厂商 这揭示出一个不可阻挡的趋势 即随着
  • 区块链项目数据存储系统分析

    前言 一 区块链简介 二 数据存储 1 比特币 Bitcoin 2 以太坊 3 Hyperledger Fabric 4 EOS Enterprise Operation System 4 1 IPFS 4 2 EOS存储的设计 5 The
  • Android-数据存储(上)

    一 Debug调试 1 跟踪程序的运行过程 找出问题出现的地方 更快的解决问题 bug 2 梳理已有功能代码的运行逻辑流程 二 数据存储 1 sp存储 2 手机内部存储 3 手机外部存储 三 练习
  • 网贷风控体系之-风控模型

    网贷风控体系之 风控模型 大数据风控模型主要分为两类 反欺诈模型 交叉验证 聚类分析 黑灰名单 二元好坏模型 准入阶段 授信额度期限利率模型 评分卡模型 LR XGBoost 贷中阶段 风险变化评估 风险预警 贷后阶段 催收时机 催收方法
  • Unity学习:资源存储加载之——文件夹、路径格式及其方法等

    1 Assets文件夹 Assets文件夹是unity项目中放置游戏资源的主文件夹 根目录文件夹 1 路径格式 assetsPath Assets xx xx xxx 2 编辑器下使用的加载方法 Resources LoadAssetAtP
  • 区块链的基本概念

    区块链是分布式数据存储 点对点传输 共识机制 加密算法等计算机技术的新型应用模式 所谓共识机制是区块链系统中实现不同节点之间建立信任 获取权益的数学算法 区块链技术的内涵可概括为 在缺少可信任的中央节点和可信任的通道的情况下 分布在网络中的
  • 微信小程序开发之数据存储 参数传递 数据缓存

    微信小程序开发内测一个月 数据传递的方式很少 经常遇到页面销毁后回传参数的问题 小程序中并没有类似Android的startActivityForResult的方法 也没有类似广播这样的通讯方式 更没有类似eventbus的轮子可用 现在已

随机推荐

  • 5-8 以特殊方式跟管理员打招呼

    创建一个至少包含5个用户名的列表 且其中一个用户名为 admin 想象你要编写代码 在每位用户登录网站后都打印一条问候消息 遍历用户名列表 并向每位用户打印一条问候消息 如果用户名为 admin 就打印一条特殊的问候消息 如 Hello a
  • 使用EasyExcel实现导入导出功能

    使用EasyExcel实现导入导出功能 一 导出 1 使用ideal新建一个maven项目 并在pom xml文件中引入EasyExcel依赖
  • impala 错误

    问题一 impala state store unrecognized service 原因 当前节点未成功安装impala server impala state store impala catalog 解决方案 yum install
  • ulua源码分析

    对于NestClass的Type 用了2次被Cache了两次 主要是因为PushType这个函数 对每个Type对象 不进行Cache检测 总是push一个新的proxy对象
  • 蓝桥杯省赛2021 括号序列 python

    给定一个括号序列 要求尽可能少地添加若干括号使得括号序列变得合法 当添加完成后 会产生不同的添加结果 请问有多少种本质不同的添加结果 两个结果是本质不同的是指存在某个位置一个结果是左括号 而另一个是右括号 例如 对于括号序列 只需要添加两个
  • MQTT:用Mosquitto搭建轻量级的设备接入网关

    开发部署在云端的设备接入网关服务就不得不提到MQTT 使用MQTT不论是从设备到设备 还是设备到云端服务的双向通讯 都可以获得较好的支持 MQTT的起源和我的理解 用tcpdump分析下MQTT的通讯时序 这里基于mosquitto 以一组
  • One PUNCH Man——半监督学习

    文章目录 半监督学习介绍 半监督SVM 基于分歧的方法 半监督学习介绍 我们在丰收的季节来到瓜田 满地都是西瓜 瓜农抱来四个西瓜说这都是好瓜 然后指着地里面六个瓜说这些不好 还需要再生长几天 基于这些信息 我们能否构建一个模型 用于判别地里
  • 优雅的玩转Fast-DDS

    优雅的玩转Fast DDS 安装依赖 sudo apt install cmake g python3 pip wget git pip3 install U colcon common extensions vcstool Fast DD
  • Web开发权威指南笔记(二)

    书 Web开发权威指南 美 Chris Aquino Todd Gandee著 为2nd实战项目CoffeeRun练习以及代码整理 全为个人借鉴本书产出 若需要转载请联系通知我 请尊重原创 谢谢 整理了大概5天了 内容比较多 很多重点都整理
  • mysql区别

    mysql区别 5 0之后与5 0之前 mysql5 0以及5 0以上的版本都存在一个系统自带的系统数据库 是information schema 而5 0之前的版本不存在且5 0以下的版本是多用户单操作 information schem
  • 如何创建NFT-独家设计

    如何创建NFT 第一步 下载并安装 MetaMask小狐狸钱包 第二步 打开官网https opensea io 点击右上角的钱包标志 进行链接 第三步 右上角弹出钱包提示 点击下一步就成功了 第四步 回到首页 点击create按钮 进入创
  • feign使用注意

    参数使用注意 参数name value属性 这两个的作用是一样的 指定的是调用服务的微服务名称 参数url 指定调用服务的全路径 经常用于本地测试 如果同时指定name和url属性 则以url属性为准 name属性指定的值便当做客户端的名称
  • c#正确用smtp.office365.com发邮件

  • Python自动化测试Unittest框架基本使用

    Unittest 框架 首先要知道这个框架是Python自带的 不需要安装 这个框架最重要的4 个核心 TestCase TestSuite TextTestRunner Fixture TestCase 个人总结一下 这个就是用测试用例继
  • SpringCloud与SpringBoot的版本对应关系

    在SpringCloud官网 https spring io projects spring cloud 可以看到 当前 2021年11月 SpringCloud的最新GA版本是2020 0 4这一版 除了2020 0 X版本外 Sprin
  • 基于掌控板+二哈+TinyWebDB+Easy_IoT的人脸识别测温

    文章目录 前言 一 部分硬件及平台介绍 1 二哈识图 HuskyLens 2 TinyWebDB 3 Easy IoT 二 操作步骤 1 二哈的使用 2 TinyWebDB的使用 3 Easy IoT的使用 三 硬件连接 四 图形化代码编写
  • jdk8 免登录安装

    1 注册一大堆 麻烦死了 程序员怎么可能做被迫的事情 2 复制下载链接https www oracle com webapps redirect signon nexturl https download oracle com otn ja
  • 解析目标文件

    最近在看 程序员的自我修养 颇有体会 故化繁为简 整理书中部分内容 作为学习笔记 PC平台上流行的可执行文件格式主要是windows下的PE Portable Executable 和Linux下的ELF Executable Linkab
  • 基于MapReduce的手机上网流量统计分析

    Hadoop简介 适合大数据的分布式存储与计算平台 运行在Hadoop之上的大型服务器集群 数据情况 摘取部分 字段描述 时间戳 手机号码 AP mac AP mac 访问的网址 网址种类 上行数据包 下行数据包 流量 访问状态 手机上网流
  • 区块链项目数据存储系统分析

    前言 一 区块链简介 二 数据存储 1 比特币 Bitcoin 2 以太坊 3 Hyperledger Fabric 4 EOS Enterprise Operation System 4 1 IPFS 4 2 EOS存储的设计 5 The