Подтвердить что ты не робот

Альтернативы SQLite для С++

Я разрабатываю приложение, которое должно хранить данные со многими типами записи и чтения, что требует быстрого поиска данных (потребность в каких-то индексах), а также возможность сериализации и сохранения данных.

В настоящее время я думаю об использовании SQLite, который выполняет эту работу, но я открыт для альтернатив. Синтаксис SQLite действительно не подходит элегантно в С++-коде (например, я вынужден получить доступ к результатам по номерам столбцов вместо имен столбцов и т.д.).

4b9b3361

Ответ 1

Оставайтесь с SQLite, но найдите для этого хорошую С++-библиотеку.

Этот fooobar.com/questions/103338/... должен помочь вам...

Ответ 2

Я бы сказал, что добавленная зависимость от библиотеки обертки не стоит того, чтобы иметь дело с расходами на эту дополнительную зависимость. Вы не хотите задерживать отладку этих обертковых библиотек, когда документация для них может быть скудной. SQLLite должен быть более стабильным и иметь лучшую документацию и, следовательно, более надежную зависимость.

Я бы либо разбирался с sqllite, либо обернул его самим разумным способом на основе вашего конечного приложения.

Ответ 3

Кажется, что база данных - единственный реальный вариант для вас. Однако, если вы выбрали SQLite или MySql или Postgres, это не имеет особого значения в индексной точке столбца.

Возможно, что вы действительно хотите, это лучшая абстракция базы данных. Возможно, вы захотите попробовать Poco, у этого есть отличный: http://pocoproject.org/

Ответ 4

Berkeley DB aka SleepyCat. Если вы просматриваете архивы, есть статья Майка Олсена, в которой рассказывается об основных недостатках SQL в любом проекте. В прошлом году есть еще одна статья, в которой говорится, что SQL на ней выходит, потому что уровни ORM становятся намного лучше.

Ответ 5

Если вы попросите меня остаться с SQLite и "сделайте это сами" - обертывание довольно просто, я сделал различные обертывания поверх SQLite. Зачем? Потому что его API намного дружелюбнее, чем что-либо другое, связанное с базой данных, и вам не нужно тратить много усилий. С библиотекой-оберткой вы добавите больше неактивных событий, и, самое главное, большинство оберток не предназначены специально для использования встроенных баз данных. Я всегда повторяю, что со встроенной базой данных правильный способ сильно отличается от оптимального подхода для сервера базы данных...

Ответ 7

Если синтаксис SQL для вас не важен, я рекомендую MetaKit - это немного другой подход, но он довольно мощный и я лично знают более чем несколько коммерческих проектов, которые используют его успешно, даже на встроенных системах.

Этот Tutoria l весьма полезен для начала.

Ответ 8

Я согласен с тем, что SQLite несовместим с индексированием индексов С++ или столбцов. Существует множество оболочек С++ SQLite, которые поощряют доступ к столбцам по имени. SQLite ++ является лишь одним из многих.

Ответ 9

Вместо sql-производного вы можете подумать об использовании инвертированной IR-библиотеки индекса, такой как Lucene (или один из многих клонов там). Я знаю, что Lucene - это Java, но вы можете написать управляемую библиотеку С++ для взаимодействия с Lecene.Net.

Что касается скорости, я очень доволен работой Lucene для ее чтения. Это не так оптимизировано для его написания, но его все еще довольно хорошо, если вы не пытаетесь создать индекс миллионов "документов".

Ответ 10

Если вы не работаете в Windows, вы можете посмотреть в кабинет Токио. Это выглядит неплохо. Я жду порт Win32, поэтому я не могу много говорить об этом, кроме того, что производительность выглядит впечатляюще.

http://anyall.org/blog/2009/04/performance-comparison-keyvalue-stores-for-language-model-counts/

Это не производная от SQL. Это прямой магазин b-tree/hash. Это очень приветствуется, на мой взгляд. Единственной конкурентной библиотекой, о которой я знаю, является Berkeley DB, у которой меньше желаемого лицензирования.