Skip to content

Commit

Permalink
feat: optimeze query speed
Browse files Browse the repository at this point in the history
  • Loading branch information
zuuluuz committed Oct 15, 2018
1 parent 06377a7 commit 85576a2
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 6 deletions.
4 changes: 1 addition & 3 deletions libraries/app/database_api_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,11 @@ fc::variants database_api_impl::get_table_objects(uint64_t code, uint64_t scope,
auto upper = kv_idx.lower_bound(boost::make_tuple(existing_tid->id, uppper_id));

auto end = fc::time_point::now() + fc::microseconds(1000 * 10);
vector<char> data;
name tname(table);
uint64_t count = 0;
for(auto it = lower; it != upper; ++it) {
if(fc::time_point::now() > end || count == limit) break;
copy_inline_row(*it, data);//TODO binary_to_variant不会修改data数据,这里可以不需要拷贝数据,直接使用it指向的数据
result.emplace_back(abis.binary_to_variant(tname.to_string(), data, fc::microseconds(1000 * 10)));
result.emplace_back(abis.binary_to_variant(tname.to_string(), it->value, fc::microseconds(1000 * 10)));
++count;
}
}
Expand Down
5 changes: 4 additions & 1 deletion libraries/chain/abi_serializer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ auto pack_unpack()
});
}

map<type_name, pair<graphene::chain::abi_serializer::unpack_function, graphene::chain::abi_serializer::pack_function>> abi_serializer::built_in_types;

abi_serializer::abi_serializer(const abi_def &abi, const fc::microseconds &max_serialization_time)
{
configure_built_in_types();
Expand All @@ -56,7 +58,8 @@ abi_serializer::abi_serializer(const abi_def &abi, const fc::microseconds &max_s

void abi_serializer::configure_built_in_types()
{
//TODO 每次实例化abi_serializer时候都会做这个操作,能否把built_in_types 声明成static作为类成员?
if(built_in_types.size() > 0) return;

built_in_types.emplace("bool", pack_unpack<uint8_t>());
built_in_types.emplace("int8", pack_unpack<int8_t>());
built_in_types.emplace("uint8", pack_unpack<uint8_t>());
Expand Down
4 changes: 2 additions & 2 deletions libraries/chain/include/graphene/chain/abi_serializer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ struct abi_serializer {
map<name,type_name> tables;
map<uint64_t, string> error_messages;

map<type_name, pair<unpack_function, pack_function>> built_in_types;
void configure_built_in_types();
static map<type_name, pair<unpack_function, pack_function>> built_in_types;
static void configure_built_in_types();

fc::variant _binary_to_variant(const type_name& type, const bytes& binary,
size_t recursion_depth, const fc::time_point& deadline, const fc::microseconds& max_serialization_time)const;
Expand Down

0 comments on commit 85576a2

Please sign in to comment.