新手问答 eos mongodb 如何做查询优化
@strahe 我按https://www.bcskill.com/index.php/archives/432.html做了分片 但是在执行下面,查询 “二级” 数据时
db.action_traces.find({"act" : { "account" : "eosio" }}).limit(1)
会卡住 猜测是
指定数据库里需要分片的集合和片键,哈希id 分片
db.runCommand( { shardcollection : "eos.blocks",key : {"_id": "hashed"} } );
这个设置不对,能帮忙看下不
你将 blocks 根据 _id 进行 hash 分片, 但是你查询的是 action_traces 啊.
act.account
可能也需要索引.

mongos> db.blocks.find().limit(1)
{ "_id" : ObjectId("5b874835fe308eca83f18fc9"), "block_id" : "0000000267f3e2284b482f3afc2e724be1d6cbc1804532ec62d4e7af47c30693", "block" : { "timestamp" : "2018-06-09T11:56:30.000", "producer" : "eosio", "confirmed" : 0, "previous" : "00000001405147477ab2f5f51cda427b638191c66d2c59aa392d5c2c98076cb0", "transaction_mroot" : "0000000000000000000000000000000000000000000000000000000000000000", "action_mroot" : "e0244db4c02d68ae64dec160310e247bb04e5cb599afb7c14710fbf3f4576c0e", "schedule_version" : 0, "new_producers" : null, "header_extensions" : [ ], "producer_signature" : "SIG_K1_KhKRMeFHa59AzBaqNvq89Mye9uTNsRsY4koYZk4GBxb4UfSEakj4LwxxP5xQVK4q9N32JFhMpjnHa8pgTKNLwP1vXpU6eg", "transactions" : [ ], "block_extensions" : [ ] }, "block_num" : 2, "createdAt" : ISODate("2018-08-30T01:28:22.280Z"), "in_current_chain" : true, "irreversible" : true, "updatedAt" : ISODate("2018-08-30T01:28:21.260Z"), "validated" : true }
mongos> db.blocks.find({"block" : {"producer" : "eosio"}}).limit(1)
查询这个也是卡住了

基本没用过几次 mongo,临时抱佛脚, 能否有时间 专门开个帖子,说下 EOS block 数据 入库 mongo 优化查询这块

你到这一步了说明也差不多了, 其实关键是分片的片键选择和 mongo 的存储结构, 最好是将索引的字段移到最外层来, 比如人为的将producer
移到外层, 这样就不用索引block.producer
, 直接索引'producer', 查询起来方便很多.

比如人为的将producer移到外层, 这样就不用索引block.producer
这个得稍微改下 mongo_db_plugin 吧,数据库 跑的太艰辛,先不管这个了。
先想只解决查询卡的事,
关键是分片的片键选择
按 EOS 原版 mongo_db_plugin 入库的数据,怎么选呢?
索引,索引,索引 'block.producer'
这个我没看懂
mongo.find({'a': 'a'})
这样查的话把a
设置为索引.
mongo.find({'a': {'b': 'c'}})
这样查的话把a.b
设置为索引.

不是每一级选择一个键分片, 是你检索的什么字段就要索引什么字段,
我们根据 zone 分片的, 不是 hash 分片, trans 和 block 根据 block_bum 分, actions 根据 expiration.
大致思路: https://docs.mongodb.com/manual/tutorial/sharding-tiered-hardware-for-varying-slas/