直接通过底层数据库levelDB查询区块链数据,而不是使用提供的geth,会更好吗?怎么可能呢?我可以在mysql或elasticsearch中通过发送方/接收方索引事务吗?我看到vulcanizeDB在做这个
发布于 2018-03-29 06:27:21
Geth对数据库执行三项操作,在尝试寻找替代方案时应该考虑这些操作。
要想找到工作,LevelDB并不是一个挑战。您可以使用您喜欢的语言获取任何实现谷歌的级数据库的回购。
如果要解决这个问题,就必须完成所有这三项任务才能访问区块链上的数据。我尝试使用自己的编程知识来创建这个程序,但是无法使用java (我建议使用python)精确地解码复杂的RLP,因为RLP结构的复杂性可能不同,因此不可能使用java创建一个固定的数组。在GitHub上有一些包试图在某种程度上解码RLP。
形成梅克尔帕特里夏的尝试也是具有挑战性的。最好你能辨认出树的根。每个节点(除非是叶节点)将包含对数据库中另一个位置的引用。每棵树的根都包含在块头中,块头的位置以一个特殊的字符序列开始(如果您在一个小levelDB中搜索所有的值以获得values,您将看到这些特殊情况)。然后遍历树是每个帐户的公共地址。
我不知道创建自己的解决方案会提高什么效率,这在很大程度上取决于您对黄纸的真实程度以及您使用的语言。如果您有一个特殊的情况,您想要使用这个数据库(IE搜索智能合同,或输入),并且只在您的程序中实现这个例子的某些方面,那么我相信您将看到您的非完整Geth实现的性能有所提高。
警告:这并不完全是Ethereum的工作方式,但它给了您一个想法。将区块链上的数据视为信息字符串。您需要所有字符来生成区块链上的任何信息字符串。然后each会将每个字符存储在一个巨大的数据库中。如果您解码任何字符,您将看到每一个指向另一个,如果您遵循的路径,您可以解码一个字符串。问题是,您想知道块链中存储“狗”的位置,但这实际上是几个位置。如果您知道它从哪里开始(块头),那么您可以通过使用步骤2和步骤3来构造信息。
我自己已经试着去理解这些概念了,所以如果我离开了,或者需要澄清什么,请问!如果我没有长篇大论地回答你,我祝你好运!
发布于 2018-03-29 07:10:41
这种办法有其固有的局限性:
您可以获得的唯一数据是块和事务。是的,它将比从geth客户端读取更快。
https://ethereum.stackexchange.com/questions/42751
复制相似问题