Jump to content

ИнфинитиБД

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

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

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

[ редактировать ]

Весь доступ к системе осуществляется через несколько базовых методов, которые могут сохранять или извлекать по порядку один «элемент» или «кортеж» переменной длины за раз со скоростью порядка 1 миллиона операций в секунду, агрегированных по нескольким потокам, когда в памяти. Операции представляют собой либо стандартный Map API для get(), put(), итераторы и т. д. или на нижнем уровне, insert(), delete(), update(), first(), next(), last(), и previous(). Типичные элементы имеют размер около 30 байт в несжатом виде в памяти, но LOB, например, используют элементы размером 1 КБ. Поскольку каждая операция влияет только на один элемент, доступ к небольшим структурам данных осуществляется быстро. Это отличается от фрагментированного доступа, такого как, например, форматирование и анализ всего текста JSON или XML или целых графов сериализации объектов Java. Масштабирование пространства и производительности ItemSpace происходит плавно, поскольку создается, увеличивается, сжимается или исчезает структура из нескольких элементов, налагаемая клиентом любого размера. Производительность при хранении аналогична любому блочно-ориентированному B-дереву с блоками размером около 4 КБ, что составляет O (log( n )) на доступ. По умолчанию имеется блочный кеш размером 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 Embedded.
  • Внутренняя веб-консоль управления для безопасного управления пользователями, ролями, базами данных и разрешениями.
  • Внутренний защищенный веб-просмотр и редактирование базы данных с помощью табличных представлений, представлений 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
  • Подписание с использованием нескольких сертификатов или открытых ключей
  • Инкрементальное подписание — каждое открытие базы данных позволяет добавлять больше подписей.
  • Хранение и организация сертификатов в метаданных в одном файле базы данных.
  • Пользовательские стратегии проверки подписи клиента — «N из M», любой проверенный сертификат и т. д.
  • Проверка сертификата

Возможности InfinityDB Embedded (версия 4):

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

AirConcurrentMap — это реализация Java ConcurrentNavigableMap. Он имеет:

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

Как для InfinityDB, так и для AirConcurrentMap:

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

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

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

  • консолидация фармацевтических и медицинских данных
  • сбор, описание, консолидация и обмен орнитологическими данными
  • представление таксономий различных типов
  • инструменты среды программирования, такие как навигация по репозиторию исходного кода
  • индексаторы текста
  • системы консолидации электронной почты
  • распределенные промышленные системы сбора данных.
  1. ^ Питерс, Л. и Лаверс, Т. (2008). Экстремальное тестирование Swing: экстремальный подход к комплексному тестированию приложений Java . Пакт Паблишинг. п. 224. ИСБН  9781847194824 .
  2. ^ «Интерфейс карты (Учебные руководства по Java™ > Коллекции > Интерфейсы)» .
  3. ^ http://boilerbay.com/docs/AirConcurrentMap_Performance_Testing.pdf [ только URL-адрес PDF ]
  4. ^ US 5283894   «Метод мета-доступа к параллельному индексу B-дерева без блокировки для кэшированных узлов»
  5. ^ US 10417209   «Параллельный индекс с использованием копирования при записи»
  6. ^ New York Times - Специальные предложения Sports World: видеотехнологии; Пользовательские повторы

См. также

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 94d412b50d6a20c66080b6ef48f43f9c__1647055320
URL1:https://arc.ask3.ru/arc/aa/94/9c/94d412b50d6a20c66080b6ef48f43f9c.html
Заголовок, (Title) документа по адресу, URL1:
InfinityDB - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)