Введение

Встроенная библиотека баз данных

Metakit — это компактная встроенная библиотека баз данных, занимающая небольшое место. Она сочетает в себе преимущества плоских файлов, реляционных, объектно-ориентированных и древовидных баз данных, поддерживая реляционные соединения, сериализацию, вложенные структуры и мгновенное изменение схемы. Наиболее востребованы интерфейсы для C++ (собственный), Python и Tcl.

История

Metakit был написан Жаном Клодом Випплером, разработчиком программного обеспечения из Нидерландов. Его разработка началась примерно в 1997 году, а в 2001 году он был выпущен под открытой лицензией MIT X11. Автор предоставляет коммерческую поддержку. Однако в последние несколько лет Випплер уделяет меньше времени Metakit и больше своим другим проектам. Эта база данных используется в нескольких коммерческих продуктах (включая Address Book в Mac OS X 10.4 и более ранних версиях), а также в ряде проектов с открытым исходным кодом (например, в RSS-читалке Akregator от KDE) и во внутренних проектах (обычно с использованием интерфейсов Python или TCL). Другой связанный проект, Starkit (виртуальная файловая система для TCL), разработанный Випплером, стал популярен среди программистов на TCL. Список рассылки Metakit активен, и Випплер регулярно публикует в нем сообщения. Другие разработчики также вносят свой вклад в проект, предоставляя исправления ошибок и предложения.

Особенности

В отличие от большинства других систем баз данных, которые хранят строки таблицы базы данных в одном месте (архитектура, ориентированная на строки), Metakit хранит отдельные столбцы отдельно (архитектура, ориентированная на столбцы). На протяжении многих лет был возможен только последовательный доступ к таблицам (со сложностью O(1) для доступа и O(N) для поиска), позже были добавлены хеш-структуры и структуры, подобные B-деревьям (снижая типичную сложность поиска до O(1)). С годами были добавлены также реляционные операции (например, GROUP BY и JOIN). Данные таблиц можно комбинировать и обрабатывать с помощью гибких механизмов, называемых представлениями. Данные базы данных переносимы между платформами. Накладные расходы на дисковое пространство в Metakit очень невелики — автоматически применяются различные методы для их максимального сокращения. Предоставляется средство просмотра структур базы данных Metakit (Kitview). Практический предел размера базы данных составляет около 1 ГБ (даже на 64-битных платформах). Многопоточный и многопользовательский доступ требует ручной поддержки со стороны программиста и не рекомендуется (в C++, TCL и Python используется один автоматически глобальный блокировщик). Комбинации более сложных функций часто не тестируются и могут приводить к сбоям. Возможно добиться несколько более высокой производительности, чем с другими базами данных (в опубликованных тестах сравнивались с SQLite и Berkeley DB), но это требует значительного тестирования и глубокого понимания внутренностей Metakit. API Metakit имеет низкий уровень абстракции по сравнению с SQL. Главный недостаток Metakit — его довольно фрагментированная и порой устаревшая документация. Полное понимание его API и оптимизация производительности требуют глубокого изучения исходного кода библиотеки. Терминология Metakit значительно отличается от стандартной терминологии баз данных. API и формат файла неоднократно изменялись с течением времени. Metakit тестируется на Windows, Unix и Mac OS X.