InfinityDB - InfinityDB

InfinityDB это все-Ява встроенная база данных движок и СУБД клиент / сервер с расширенным интерфейсом java.util.concurrent.ConcurrentNavigableMap (подинтерфейс java.util.Map), который развертывается на портативных устройствах, на серверах, на рабочих станциях и в распределенных настройках. Конструкция основана на запатентованном безблокировочном параллельном B-дерево архитектура, которая позволяет клиентским программистам достичь высокого уровня производительности без риска сбоев. [1]

Новая версия клиент / сервер 5.0 находится в стадии альфа-тестирования, обертывая установленную встроенную версию для обеспечения общего доступа через безопасный удаленный сервер.

Во встроенной системе данные сохраняются и извлекаются из одного файла встроенной базы данных с помощью InfnityDB. API что обеспечивает прямой доступ к пространствам элементов переменной длины. Программисты-клиенты базы данных могут создавать традиционные отношения, а также специализированные модели, которые напрямую удовлетворяют потребности зависимого приложения. Нет ограничений на количество элементов, размер базы данных или JVM size, поэтому InfinityDB может работать как в самой маленькой среде, которая предоставляет хранилище с произвольным доступом, так и может масштабироваться до больших настроек. Традиционные отношения и специализированные модели могут быть направлены в один и тот же файл базы данных. InfinityDB может быть оптимизирован для стандартных отношений, а также для всех других типов данных, что позволяет клиентским приложениям выполнять минимум один миллион операций в секунду в виртуальной 8-ядерной системе.

AirConcurrentMap, это карта в памяти, которая реализует интерфейс Java ConcurrentMap,[2] но внутри он использует многоядерный дизайн, так что его производительность и память делают его самым быстрым Java Map при выполнении упорядочивания, и он содержит от среднего до большого количества записей.[3] Итерация AirConcurrentMap выполняется быстрее, чем любые итераторы Java Map, независимо от конкретного типа карты.

API карты

Доступ к InfinityDB можно получить как к расширенному стандартному java.util.concurrent.ConcurrentNavigableMap или через низкоуровневый API ItemSpace. Интерфейс ConcurrentNavigableMap является подинтерфейсом java.util.Map, но имеет специальные методы упорядочивания и параллелизма: это тот же API, что и java.util.concurrent.ConcurrentSkipListMap. Карты могут быть вложенными в сложные структуры. Карты имеют стандартную семантику, но работают внутри «пространства кортежей», в то время как Карты на самом деле не хранятся, а являются помощниками, каждый из которых представляет не что иное, как неизменяемый префикс кортежа. Карты могут создаваться динамически с высокой скоростью, если это необходимо для доступа, и являются потокобезопасными и могут работать одновременно с несколькими ядрами. Доступные типы ключей и значений включают все примитивные типы данных Java, даты, строки, небольшие массивы символов или байтов, байтовые строки, индексы «огромный массив», длинные объекты символов или длинные двоичные объекты, а также специальные типы EntityClass. и «Атрибут». Карты могут быть многозначными. Приложения могут использовать только доступ на основе карты и могут смешивать доступ нижнего уровня «ItemSpace» к одним и тем же кортежам, поскольку доступ к карте - это просто оболочка и нет различий на уровне кортежей.

Модель данных нижнего уровня ItemSpace

12 примитивных типов данных называются «компонентами», и они атомарны. Компоненты могут быть объединены в короткие составные части, называемые «элементами», которые являются единицей хранения и поиска. Структуры более высокого уровня, которые объединяют эти элементы, разрабатываются клиентом и включают, например, записи неограниченного размера с неограниченным количеством столбцов или атрибутов со сложными значениями атрибутов неограниченного размера. Ключи тогда могут быть составом компонентов. Значения атрибутов могут быть упорядоченными наборами составных компонентов, характер больших объектов (CLOB's), бинарные большие объекты (BLOB) или без ограничений разреженные массивы. Другие структуры более высокого уровня, построенные из нескольких элементов, включают ассоциации «ключ-значение», такие как упорядоченные карты, упорядоченные наборы, сети «сущность-атрибут-значение» четверок, деревья, группы доступности базы данных, таксономии или полнотекстовые индексы. Они могут сочетаться с другими пользовательскими структурами, определяемыми клиентом.

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

Кодирование данных

«ItemSpace» представляет всю базу данных и представляет собой простой упорядоченный набор элементов без какого-либо другого состояния. Элемент фактически хранится с каждым компонентом, закодированным в двоичной форме переменной длины в массиве символов, причем компоненты самоописываются в стандартном формате, который сортируется правильно. Программисты работают с компонентами только как с примитивами, а хранимые данные строго типизированы. Данные не сохраняются в виде текста для анализа со слабой типизацией, как в JSON или же XML, и не анализируется из определенных программистом представлений двоичного потока. Не существует специально разработанных клиентом двоичных форматов, которые могут стать хрупкими и в которых могут возникнуть проблемы с безопасностью, документацией, обновлением, тестированием, управлением версиями, масштабированием и отладкой, как в случае с сериализацией объектов Java.

Масштабирование производительности

Весь доступ к системе осуществляется с помощью нескольких основных методов, которые могут сохранять или извлекать по порядку один элемент или кортеж переменной длины за раз со скоростью порядка 1 млн операций в секунду, агрегированных по нескольким потокам, когда в памяти. Это либо стандартный API карты для получать(), положить(), итераторы и т. д. или на более низком уровне вставлять(), Удалить(), Обновить(), первый(), следующий(), последний(), и предыдущий(). Типичные элементы занимают около 30 байт без сжатия в памяти, но большие объекты, например, используют элементы размером 1 КБ. Поскольку каждая операция затрагивает только один элемент, к небольшим структурам данных можно быстро получить доступ. Это контрастирует с фрагментированным доступом, таким как, например, форматирование и анализ целых текстов JSON или XML или целых графов сериализации Java-объектов. Масштабирование пространства и производительности ItemSpace осуществляется плавно, поскольку создается, увеличивается, сжимается или исчезает навязываемая клиентом структура с несколькими элементами любого размера. Производительность при хранении такая же, как у любого блочно-ориентированного B-дерева с блоками около 4 КБ, что составляет О(бревно(п)) за доступ. По умолчанию используется блочный кеш размером 2,5 МБ, который имеет неограниченный размер, но часто составляет около 100 МБ. Кеш растет только по мере необходимости.

Масштабирование пространства

Для повышения производительности и эффективности элементы хранятся внутри одного сжатого префикса B-дерева переменной длины в виде неинтерпретируемой последовательности байтов для дальнейшего сжатия. B-дерево обычно может вырасти до диапазона 100 ГБ, но не имеет ограничений. Существует только один файл, поэтому нет журнала или других файлов для записи и очистки. InfinityDB минимизирует размер файла базы данных с помощью четырех типов сжатие (префикс, суффикс, zlib, и UTF-8 ).

Обновление без схемы

Схема обновление, когда структуры расширяются или модифицируются, выполняется путем добавления или удаления элементов по-новому во время выполнения, и нет никаких сценариев обновления - следовательно, модель данных является NoSQL и не имеет схемы.

Помимо обычных примитивных типов Java, существуют типы EntityClass и Attribute, каждый из которых идентифицируется по имени или номеру. Это необязательные «метаданные», которые можно смешивать с другими компонентами любого элемента. Их можно использовать для представления таблиц, например, где каждой таблице дается определенный класс EntityClass в начале статьи, а каждому столбцу дается свой атрибут. Каждый элемент таблицы начинается с определенного EntityClass, затем имеется один или несколько нормальных примитивов, представляющих «сущность» (например, ключ), затем есть конкретный атрибут, соответствующий столбцу, и, наконец, некоторые нормальные примитивы, представляющие значение этот атрибут. Этот простой шаблон можно расширить в любое время, чтобы разрешить вложенные таблицы внутри любого атрибута или вложенные атрибуты внутри других атрибутов, или многозначные атрибуты и многое другое. В другом месте нет фиксированной схемы, поэтому новые данные, поступающие в систему, описывают себя на уровне элементов. Номера или имена EntityClass и Attribute могут быть представлены в расширенном JSON. Когда данные отображаются в веб-браузере базы данных клиент / сервер, их можно просматривать, обрабатывать и передавать в виде списка отсортированных форматированных элементов, документов JSON или вложенных таблиц, видимая структура которых определяется классами EntityClass и Атрибуты, смешанные с элементами. Сочетание динамической гибкости JSON и формальности таблиц.

Транзактность

Предусмотрены как глобальные транзакции ACD, так и транзакции ACID для каждого потока. Каждый экземпляр InfinityDB хранит данные в одном файле базы данных и не требует дополнительных файлов журнала или отката. В случае любой катастрофы, кроме сбоя питания или другой неисправности оборудования, база данных гарантированно будет соответствовать состоянию на момент завершения последней глобальной фиксации. Восстановление после внезапного завершения происходит немедленно и не требует медленного воспроизведения журнала. Массовая загрузка является глобально транзакционной с неограниченным размером данных и одновременно с другими видами использования. Глобальные транзакции не обеспечивают изоляцию между потоками, поэтому семантика - «ACD» (а не «ACID»). В качестве альтернативы транзакции ACID используют оптимистическую блокировку, чтобы обеспечить изоляцию между потоками.

Немедленная сборка мусора

По мере того, как структуры данных растут и сжимаются, освободившееся пространство немедленно освобождается и становится доступным для других структур. Системы могут работать бесконечно без постепенных утечек пространства или длительных перерывов на этапах утилизации мусора. Когда структура данных становится пустой, все ее пространство перерабатывается, вместо того, чтобы оставлять «надгробные камни» или другие заполнители. Например, возможно, очень большой атрибут с несколькими значениями может сжиматься до одного значения, становясь таким же эффективным, как и любой однозначный атрибут, и если это последнее значение удалено, все пространство для него будет освобождено, включая пространство для атрибута, которым оно было прикреплен к, и если строка имеет только атрибуты без значений, строка также полностью восстанавливается. Если таблица теряет все свои строки, освобождается место для таблицы. Это свойство имеет любой размер или тип структуры данных. Счетчиков ссылок нет, поэтому любой тип графиков собирается автоматически.

Товары

Возможности клиента / сервера InfinityDB (в состоянии альфа-тестирования):

  • Система клиент / сервер для безопасного удаленного общего доступа к набору файлов встроенной базы данных InfinityDB.
  • Внутренняя веб-консоль управления для безопасного управления пользователями, ролями, базами данных и разрешениями.
  • Просмотр и редактирование баз данных с безопасным веб-интерфейсом в табличных представлениях, JSON и ItemSpace. В табличном режиме данные отображаются в виде вложенных документов, таблиц и списков с одновременным редактированием и обновлением на уровне абзацев или элементов данных.
  • Безопасный RESTful-доступ Python и bash через curl для данных JSON и BLOB.
  • Удаленный доступ программ Java с помощью функции RemoteItemSpace.
  • Шаблонные запросы для произвольной реструктуризации, отличной от SQL, и запросов структур данных ItemSpace, включая эквивалент ItemSpace реляционной СУБД, выбор, проект, соединение и упорядочение.
  • ItemSuffix Transfer обеспечивает мобильность данных внутри или между базами данных с копированием, перемещением, различием, объединением и пересечением.

Возможности InfinityDB Encrypted (версия 5) (в состоянии бета-тестирования):

  • Шифрование с использованием AES-128 или AES-256 на уровне блока базы данных
  • Аутентификация с HMAC-SHA256 на уровне блока
  • Быстрое хеширование зашифрованных блоков
  • Хеширование незашифрованных блоков для проверки подлинности HMAC
  • Подпись с использованием нескольких сертификатов или открытых ключей
  • Инкрементальная подпись - каждое открытие базы данных позволяет добавлять больше подписей
  • Хранение и организация сертификатов в метаданных в одном файле db
  • Пользовательские стратегии проверки подписи клиента - «N из M», любой подтвержденный сертификат и т. Д.
  • Подтверждение сертификата

InfinityDB Embedded (версия 4) особенности:

  • Модель NoSQL - это отсортированное иерархическое хранилище ключей / значений, называемое ItemSpace для простоты, но универсальности.
  • 1 млн операций в секунду, хорошая многоядерная масштабируемость
  • Сжатие до 10 раз и более
  • Сделки
  • Мгновенная установка, нулевое администрирование: вся база данных в одном файле
  • Печать / анализ JSON с расширениями для большего количества типов данных: JSON может представлять любые данные ItemSpace.
  • Надежный шаблон обновления файлов предотвращает повреждение
  • Мгновенное восстановление после внезапного выхода из программы без лога
  • 12 примитивных типов данных
  • BLOB / CLOB, то есть двоичные длинные объекты и символьные длинные объекты
  • Типы примитивных данных метаданных EntityClass и Attribute для гибких, расширяемых во время выполнения структур

AirConcurrentMap - это реализация Java ConcurrentNavigableMap. Особенности:

  • Быстрее, чем JDK Maps для среднего и большого размера. Это заявка на патент.
  • Лучшая эффективность использования памяти по сравнению со всеми стандартными картами библиотеки Java, указанными выше примерно 1K записей.
  • Проприетарное параллельное сканирование карты быстрее, чем для Java 1.8.
  • forEach работает быстрее, чем для карт Java 1.8.

И для InfinityDB, и для AirConcurrentMap:

  • Параллельная многопоточная обработка на нескольких ядрах без блокировок увеличивает производительность на многоядерных платформах, таких как Intel i7 примерно в семь раз. Оба продукта находятся на рассмотрении.
  • Используется стандартный доступ к Java Map. Реализован расширенный интерфейс java.util.concurrent.ConcurrentNavigable, позволяющий выполнять прямую замену в любое существующее приложение или тестовый код. Этот интерфейс предоставляет специализированные методы параллелизма, а также функции упорядочивания, улучшающие исходный SortedSet.

История

Роджер Л. Деран спроектировал и разработал ядро ​​базы данных Infinity более 20 лет назад и имеет патент США 5283894.[4] Infinity Database Engine был впервые развернут в Intel 8088 язык ассемблера в редакторе спортивных видео ROSCOR (RSVE), который был лицензирован для команд НФЛ в 1980-х годах. Лексикон приобрела RSVE в 1989 году и значительно расширила сферу ее применения на все виды профессионального и студенческого спорта.[5] В версии Java 2.0 добавлена ​​возможность транзакций, а в версии 3.0 добавлены функции параллелизма, которые находятся на рассмотрении и применяются как к InfinityDB, так и к AirConcurrentMap. Infinity DB по-прежнему активно используется на тысячах сайтов различного типа, а AirConcurrentMap - новинка.

Использование полностью JAVA InfinityDB, продаваемого Boiler Bay Inc. с 2002 года, включает:

  • консолидация фармацевтических и медицинских данных
  • сбор, описание, объединение и обмен орнитологическими данными
  • представление таксономий различных типов
  • инструменты среды программирования, такие как навигация по репозиторию исходного кода
  • текстовые индексаторы
  • системы консолидации электронной почты
  • распределенные системы сбора промышленных данных.

Рекомендации

  1. ^ Петерс, Л. и Лаверс, Т. (2008). Swing Extreme Testing: экстремальный подход к полному тестированию приложений Java. Packt Publishing. п. 224.
  2. ^ https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html
  3. ^ http://boilerbay.com/docs/AirConcurrentMap_Performance_Testing.pdf
  4. ^ США 5283894  "Метод одновременного метадоступа к индексу B-дерева без блокировки для кэшированных узлов"
  5. ^ New York Times - Sports World Specials: видео технологии; Пользовательские повторы

Смотрите также