Новый выпуск библиотеки simdjson: версия 1.0

Возможно, самым популярным форматом данных в Интернете является JSON. Это простой и удобный формат. Большинство веб-сервисов позволяют отправлять и получать данные в формате JSON.

К сожалению, разбор JSON может занять много времени и энергии. Еще в 2019 году мы выпустили библиотеку simdjson. Он побил рекорды скорости и по-прежнему является одной из самых эффективных и быстрых библиотек синтаксического анализа JSON. Это делает мало компромиссов. Он обеспечивает точный синтаксический анализ с плавающей точкой, точную проверку юникода и так далее.

Независимый тест сравнивает его с другими быстрыми библиотеками C++ и демонстрирует, что он может потреблять гораздо меньше энергии.

 

Новый выпуск библиотеки simdjson: версия 1.0

Мы недавно выпустили версию 1.0. Нам потребовалось два года, чтобы дойти до этого момента. Это важный шаг для нас.

Существует множество способов, которыми библиотека может предоставить вам доступ к данным JSON. Удобным подходом является дерево DOM (DOM расшифровывается как объектная модель документа). При подходе, основанном на DOM, документ полностью анализируется и материализуется в конструкции в памяти. Для некоторых приложений это правильная модель, но в других случаях это расточительный шаг.

У нас также есть подходы, основанные на потоковой передаче. При таких подходах у вас есть интерфейс на основе событий, в котором библиотека вызывает функции, предоставляемые пользователем, при столкновении с различными элементами. Хотя это может быть очень эффективным, отчасти потому, что оно устраняет необходимость построения дерева DOM, это сложная парадигма программирования.

Другой подход-это простая сериализация-десериализация. Вы предоставляете собственную структуру данных и просите библиотеку либо записать ее в формате JSON, либо превратить JSON в вашу структуру данных. Это часто отличная модель. Однако он обладает ограниченной гибкостью.

В simdjson мы предлагаем новый подход, который мы называем По требованию. Подход по требованию похож на подход DOM, но он обходит стороной построение дерева DOM. Он полностью ленив: он декодирует только те части документа, к которым вы получаете доступ.

С помощью функции по требованию вы можете написать чистый код следующим образом:

 

#include <iostream>
#include "simdjson.h"
using namespace simdjson;
int main(void) {
 ondemand::parser parser;
 padded_string json = padded_string::load("twitter.json");
 ondemand::document tweets = parser.iterate(json);
    std::cout << uint64_t(tweets["search_metadata"]["count"]) << " results." << std::endl;
}

 

 

В таком примере библиотека получает доступ только к нужному вам содержимому, выполняя лишь минимальную проверку и индексирование всего документа.

С помощью функции по требованию, если вы открываете файл, содержащий 1000 чисел, и вам нужно только одно из этих чисел, анализируется только одно число. Если вам нужно поместить числа в свою собственную структуру данных, они материализуются там напрямую, без предварительной записи во временное дерево. Таким образом, мы ожидаем, что simdjson По требованию может часто обеспечивать превосходную производительность, когда вам не нужно материализовывать дерево DOM. Интерфейс по требованию был в основном разработан Джоном Кейзером.

В версии 1.0 библиотеки simdjson интерфейс по требованию используется по умолчанию, хотя мы также поддерживаем подход, основанный на DOM.

Версия 1.0 добавляет несколько ключевых функций:

  1. В аналитике больших данных принято реализовывать большие наборы записей в виде нескольких документов JSON, разделенных пробелами. Теперь вы можете получать преимущества по требованию при анализе почти бесконечно длинных потоков записей JSON. На каждом шаге у вас есть доступ к текущему документу, но вторичный поток индексирует следующий блок. Таким образом, вы можете получить доступ к огромным файлам, используя небольшой объем памяти, и достичь рекордных скоростей.
  2. Учитывая экземпляр по требованию (значение, массив, объект и т. Д.), Теперь вы можете преобразовать его в строку JSON с помощью метода to_json_string, который возвращает строковое представление в исходном документе для непревзойденной скорости.
  3. Интерфейс по требованию теперь поддерживает спецификацию указателя JSON. Вы можете запросить определенное значение с помощью указателя JSON в большом документе.

Выпуск 1.0 является надежным. Мы расширили и улучшили нашу документацию. Мы добавили много тестов.

Библиотека Симджсона — это результат работы многих людей. Я хотел бы поблагодарить Николаса Бойера за то, что он работал со мной в течение лета над завершением этой версии.

Вы можете найти симджсона на GitHub. Вы можете использовать его, добавив два файла в свой проект (simdjson.h и simdjson.cpp), или в качестве зависимости CMake, или с использованием многих популярных менеджеров пакетов.

проверить также

Поза для сна

Какая поза лучше всего подходит для сна?

Вы спите на спине или на животе? Или на боку? Хотите, верьте, хотите нет, но …

Добавить комментарий

Ваш адрес email не будет опубликован.