• 大小: 3.96MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-13
  • 语言: 其他
  • 标签: json  simd  

资源简介

国外性能优化方向的大牛lemire 基于simd指令开发的一套json 解析模块,速度比目前最多的rapidjson解析速度还要快上3-4倍,欢迎大家下载使用

资源截图

代码片段和文件信息

#include “simdjson/jsonparser.h“
#include 
#include 
#include 

#include “benchmark.h“
// #define RAPIDJSON_SSE2 // bad for performance
// #define RAPIDJSON_SSE42 // bad for performance
#include “rapidjson/document.h“
#include “rapidjson/reader.h“
#include “rapidjson/stringbuffer.h“
#include “rapidjson/writer.h“

#include “sajson.h“

using namespace rapidjson;
using namespace std;

bool equals(const char *s1 const char *s2) { return strcmp(s1 s2) == 0; }

void remove_duplicates(vector &v) {
  std::sort(v.begin() v.end());
  auto last = std::unique(v.begin() v.end());
  v.erase(last v.end());
}

void print_vec(vector &v) {
  for (auto i : v) {
    std::cout << i << “ “;
  }
  std::cout << std::endl;
}

void simdjson_traverse(std::vector &answer ParsedJson::iterator &i) {
  switch (i.get_type()) {
  case ‘{‘:
    if (i.down()) {
      do {
        bool founduser = equals(i.get_string() “user“);
        i.next(); // move to value
        if (i.is_object()) {
          if (founduser && i.move_to_key(“id“)) {
            if (i.is_integer()) {
              answer.push_back(i.get_integer());
            }
            i.up();
          }
          simdjson_traverse(answer i);
        } else if (i.is_array()) {
          simdjson_traverse(answer i);
        }
      } while (i.next());
      i.up();
    }
    break;
  case ‘[‘:
    if (i.down()) {
      do {
        if (i.is_object_or_array()) {
          simdjson_traverse(answer i);
        }
      } while (i.next());
      i.up();
    }
    break;
  case ‘l‘:
  case ‘d‘:
  case ‘n‘:
  case ‘t‘:
  case ‘f‘:
  default:
    break;
  }
}

std::vector simdjson_computestats(const std::string_view &p) {
  std::vector answer;
  ParsedJson pj = build_parsed_json(p);
  if (!pj.isValid()) {
    return answer;
  }
  ParsedJson::iterator i(pj);

  simdjson_traverse(answer i);
  remove_duplicates(answer);
  return answer;
}

void sajson_traverse(std::vector &answer const sajson::value &node) {
  using namespace sajson;
  switch (node.get_type()) {
  case TYPE_ARRAY: {
    auto length = node.get_length();
    for (size_t i = 0; i < length; ++i) {
      sajson_traverse(answer node.get_array_element(i));
    }
    break;
  }
  case TYPE_object: {
    auto length = node.get_length();
    for (auto i = 0u; i < length; ++i) {
      if (equals(node.get_object_key(i).data() “user“)) { // found a user!!!
        auto uservalue = node.get_object_value(i);         // get the value
        if (uservalue.get_type() ==
            TYPE_object) { // the value should be an object
          auto uservaluelength = uservalue.get_length();
          for (auto j = 0u; j < uservaluelength;
               ++j) { // go through the children
            if (equals(uservalue.get_object_key(j).data()
                       “id“)) { // ah ah found id
              auto v = uservalue.get_object_value(j);
              if (v.get_type() == TYPE_INTEGER

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-02-23 00:28  simdjson-master\
     文件         264  2019-02-23 00:28  simdjson-master\.appveyor.yml
     目录           0  2019-02-23 00:28  simdjson-master\.circleci\
     文件         135  2019-02-23 00:28  simdjson-master\.circleci\config.yml
     文件         105  2019-02-23 00:28  simdjson-master\.drone.yml
     文件           6  2019-02-23 00:28  simdjson-master\.gitignore
     文件         987  2019-02-23 00:28  simdjson-master\.gitmodules
     文件         241  2019-02-23 00:28  simdjson-master\.travis.yml
     文件          70  2019-02-23 00:28  simdjson-master\AUTHORS
     文件        1349  2019-02-23 00:28  simdjson-master\CMakeLists.txt
     文件       11356  2019-02-23 00:28  simdjson-master\LICENSE
     文件        7474  2019-02-23 00:28  simdjson-master\Makefile
     文件        6644  2019-02-23 00:28  simdjson-master\Notes.md
     文件       20284  2019-02-23 00:28  simdjson-master\README.md
     文件        3885  2019-02-23 00:28  simdjson-master\amalgamation.sh
     目录           0  2019-02-23 00:28  simdjson-master\benchmark\
     文件         195  2019-02-23 00:28  simdjson-master\benchmark\CMakeLists.txt
     文件       14803  2019-02-23 00:28  simdjson-master\benchmark\benchmark.h
     文件        7680  2019-02-23 00:28  simdjson-master\benchmark\distinctuseridcompetition.cpp
     目录           0  2019-02-23 00:28  simdjson-master\benchmark\linux\
     文件        2645  2019-02-23 00:28  simdjson-master\benchmark\linux\linux-perf-events.h
     文件        5291  2019-02-23 00:28  simdjson-master\benchmark\minifiercompetition.cpp
     文件        7942  2019-02-23 00:28  simdjson-master\benchmark\parse.cpp
     文件        7728  2019-02-23 00:28  simdjson-master\benchmark\parseandstatcompetition.cpp
     文件        9586  2019-02-23 00:28  simdjson-master\benchmark\parsingcompetition.cpp
     文件        5643  2019-02-23 00:28  simdjson-master\benchmark\statisticalmodel.cpp
     目录           0  2019-02-23 00:28  simdjson-master\dependencies\
     目录           0  2019-02-23 00:28  simdjson-master\dependencies\cJSON\
     目录           0  2019-02-23 00:28  simdjson-master\dependencies\fastjson\
     目录           0  2019-02-23 00:28  simdjson-master\dependencies\gason\
     目录           0  2019-02-23 00:28  simdjson-master\dependencies\jsmn\
............此处省略332个文件信息

评论

共有 条评论