首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引和查询块链数据和levelDB

索引和查询块链数据和levelDB
EN

Ethereum用户
提问于 2018-03-14 16:28:13
回答 2查看 2.6K关注 0票数 5

直接通过底层数据库levelDB查询区块链数据,而不是使用提供的geth,会更好吗?怎么可能呢?我可以在mysql或elasticsearch中通过发送方/接收方索引事务吗?我看到vulcanizeDB在做这个

EN

回答 2

Ethereum用户

发布于 2018-03-29 06:27:21

Geth对数据库执行三项操作,在尝试寻找替代方案时应该考虑这些操作。

  1. Geth用levelDB加载整个数据库(我认为您想做的事情)。
  2. 然后,Geth使用RLP对所有(或所需)键值对进行解密。
  3. 然后,Geth获取这些键值对(它们是merle上的节点),并创建莫克尔·帕特里夏 trie来理解块链的状态。

要想找到工作,LevelDB并不是一个挑战。您可以使用您喜欢的语言获取任何实现谷歌的级数据库的回购。

如果要解决这个问题,就必须完成所有这三项任务才能访问区块链上的数据。我尝试使用自己的编程知识来创建这个程序,但是无法使用java (我建议使用python)精确地解码复杂的RLP,因为RLP结构的复杂性可能不同,因此不可能使用java创建一个固定的数组。在GitHub上有一些包试图在某种程度上解码RLP。

形成梅克尔帕特里夏的尝试也是具有挑战性的。最好你能辨认出树的根。每个节点(除非是叶节点)将包含对数据库中另一个位置的引用。每棵树的根都包含在块头中,块头的位置以一个特殊的字符序列开始(如果您在一个小levelDB中搜索所有的值以获得values,您将看到这些特殊情况)。然后遍历树是每个帐户的公共地址。

我不知道创建自己的解决方案会提高什么效率,这在很大程度上取决于您对黄纸的真实程度以及您使用的语言。如果您有一个特殊的情况,您想要使用这个数据库(IE搜索智能合同,或输入),并且只在您的程序中实现这个例子的某些方面,那么我相信您将看到您的非完整Geth实现的性能有所提高。

警告:这并不完全是Ethereum的工作方式,但它给了您一个想法。将区块链上的数据视为信息字符串。您需要所有字符来生成区块链上的任何信息字符串。然后each会将每个字符存储在一个巨大的数据库中。如果您解码任何字符,您将看到每一个指向另一个,如果您遵循的路径,您可以解码一个字符串。问题是,您想知道块链中存储“狗”的位置,但这实际上是几个位置。如果您知道它从哪里开始(块头),那么您可以通过使用步骤2和步骤3来构造信息。

我自己已经试着去理解这些概念了,所以如果我离开了,或者需要澄清什么,请问!如果我没有长篇大论地回答你,我祝你好运!

票数 4
EN

Ethereum用户

发布于 2018-03-29 07:10:41

这种办法有其固有的局限性:

  • 您无法从底层数据库中获取世界状态,因为所有的键都在那里进行散列。它包括:
    • 账户及其余额
    • 合同存储

  • 您无法获得内部事务,因为它需要执行块事务。

您可以获得的唯一数据是块和事务。是的,它将比从geth客户端读取更快。

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/42751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档