SQLite++
От: PM  
Дата: 05.09.06 06:51
Оценка: 12 (3)
Привет всем

Немножко обновилась SQLite++, обертка над SQLite.

SQLite++ is a С++ object-oriented wrapper library of SQLite version 3.0.
The main idea is to use simple variable binding with SQL statements:

    int count;
    db << "select count(*) from employee", into(count);


Последнюю версию можно взять из SVN репозитория
Re: SQLite++
От: nen777w  
Дата: 05.09.06 07:57
Оценка:
Здравствуйте, PM, Вы писали:

PM>Привет всем


PM>Немножко обновилась SQLite++, обертка над SQLite.


PM>

PM>SQLite++ is a С++ object-oriented wrapper library of SQLite version 3.0.
PM>The main idea is to use simple variable binding with SQL statements:
PM>

PM>    int count;
PM>    db << "select count(*) from employee", into(count);
PM>


PM>Последнюю версию можно взять из SVN репозитория


гм... не долго искал обвёртки, знал что существуют но так и не нашёл. Пришлось свою написать
Спасибо что сообщили обязательно гляну.
Re[2]: SQLite++
От: nen777w  
Дата: 05.09.06 08:21
Оценка:
PM>>Последнюю версию можно взять из SVN репозитория

N>гм... не долго искал обвёртки, знал что существуют но так и не нашёл. Пришлось свою написать

N>Спасибо что сообщили обязательно гляну.

Посмотрел. Твоя мощнее. Вероятно буду твою использовать. Как у тебя с лицензией для комерческих продуктов?
И ещё хотелось бы больше примеров кода например для query или transactions.
Спасибо.
Re[2]: SQLite++
От: PM  
Дата: 05.09.06 08:53
Оценка:
Здравствуйте, nen777w, Вы писали:

PM>>Немножко обновилась SQLite++, обертка над SQLite.

[]

N>гм... не долго искал обвёртки, знал что существуют но так и не нашёл. Пришлось свою написать

N>Спасибо что сообщили обязательно гляну.

Гм, вообще-то это одна из..
Еще кучу ссылок можно обнаружить здесь
Re[3]: SQLite++
От: PM  
Дата: 05.09.06 10:04
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Посмотрел. Твоя мощнее.


Спасибо, я думал, наоборот, попроще

N>Вероятно буду твою использовать. Как у тебя с лицензией для комерческих продуктов?


Boost Software License. Можно использовать в коммерческих продуктах без ограничений.

N>И ещё хотелось бы больше примеров кода например для query или transactions.


Можно посмотреть на примеры использования в тестах.

query — просто вспомогательный класс для хранения текста SQL запроса и привязок к переменным. Надобность в непосредственном использовании query у меня пока не возникала, все делал через into и use Но вообще, можно, конечно, и через query:
  statement st(db);

  query q;
  // задаем SQL
  q.sql("select id, name from some_table where id > :id");

  // явно привязываем переменные
  int id = 3;
  string name;

  // создаем привязки к переменным вручную  Ж-[] 
  // кхм. далее могут быть опечатки. писал в форме редактирования сообщения
  q.put(into_binder_ptr(new into_pos_binder<int>(id)));       // к столбцу id
  q.put(into_binder_ptr(new into_pos_binder<string>(name)));  // к солбцу name

  q.put(use_binder_ptr(new use_pos_binder<int>(id)));        // к параметру id

  // задаем query для statement
  // способ немного извращенный. т.к. query - некопируемый класс
  // при этом разрушается query, который был в st.
  swap(st.q(), q);

  while ( st.exec() )
  {
    std::cout << id << ' ' << name << std::endl;
  }


Это просто более многословная запись такого:
  statement st(db);

  int id = 3;
  string name;
  
  st << "select id, name from some_table where id > :id", into(id), into(name), use(id);

  while ( st.exec() )
  {
    std::cout << id << ' ' << name << std::endl;
  }



Транзакции — это объекты, обычно на стеке. Конструктор начинает транзакцию, деструктор делает rollback, если не было явного commit. Вложенные транзакции не поддерживаются, у класса session есть функция active_txn(), которая возвращает указатель на текущую транзакцию (или 0, если используется режим auto commit)
  session db("mega.db");

  // db.active_txn() == 0

  {
     // стартуем транзакцию
     transaction txn(db);
        
     // db.active_txn() == &txn;
        
     db << "insert into blah-blah-blah";

     // txn.commit(); // делаем явный commit

  }  // при разрушении txn произойдет rollback, если не был вызван txn.commit()

  // транзакция завершена
  // db.active_txn() == 0
Re: SQLite++
От: trophim Россия  
Дата: 05.09.06 20:00
Оценка:
А есть тесты производительности — особо интересует сравнение с BerkleyDB. Мне собственно SQL не нужен — нужен встраиваемый движок БД. Чтобы работал как можно быстрее (очень большие потоки данных льются).
[EOF]
Let it be! — Давайте есть пчелу!
Re[2]: SQLite++
От: PM  
Дата: 06.09.06 05:19
Оценка:
Здравствуйте, trophim, Вы писали:

T>А есть тесты производительности — особо интересует сравнение с BerkleyDB. Мне собственно SQL не нужен — нужен встраиваемый движок БД. Чтобы работал как можно быстрее (очень большие потоки данных льются).


Тестов производительности нет, т.к. пока не было в них надобности

Воообще, SQLite считается одним из самых быстрых встраиваемых движков с замечательной лицензией. Думаю, сравнения c другими БД можно найти. На том же
SQLite.org есть статья sqlite &mdash; Speed Comparison.

Естественно, ОО-обертка добавляет какие-то накладные расходы. Например, для привязки переменных используются дополнительные динамические объекты, при конструировании текста SQL-запроса через operator<< используется std::stringstream.
Re[2]: SQLite++
От: dmz Россия  
Дата: 06.09.06 05:45
Оценка:
T>А есть тесты производительности — особо интересует сравнение с BerkleyDB. Мне собственно SQL не нужен — нужен встраиваемый движок БД. Чтобы работал как можно быстрее (очень большие потоки данных льются).

Едва ли оно быстрее FastDB или другой встраиваемой in-memory DB. Если скорость важна, я бы подумал в этом направлении.
Re[3]: SQLite++
От: PM  
Дата: 06.09.06 05:54
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Едва ли оно быстрее FastDB или другой встраиваемой in-memory DB. Если скорость важна, я бы подумал в этом направлении.


in-memory поддерживается и в SQLite. Достаточно вместо имени открываемого файла указать :memory:
Re[4]: SQLite++
От: dmz Россия  
Дата: 06.09.06 05:58
Оценка: 2 (1)
dmz>>Едва ли оно быстрее FastDB или другой встраиваемой in-memory DB. Если скорость важна, я бы подумал в этом направлении.

PM>in-memory поддерживается и в SQLite. Достаточно вместо имени открываемого файла указать :memory:


in-memory поддерживается и в MySQL; дело не в этом. Просто FastDB и GigaBase очень быстрые.
По моим ощущениям — много быстрее sqllite. Сравнений с замерами пока найти не могу — но если производительность важна, нужно сравнить в любом случае при выборе средства.
Re[5]: SQLite++
От: trophim Россия  
Дата: 06.09.06 17:07
Оценка:
Здравствуйте, dmz, Вы писали:


dmz>>>Едва ли оно быстрее FastDB или другой встраиваемой in-memory DB. Если скорость важна, я бы подумал в этом направлении.


PM>>in-memory поддерживается и в SQLite. Достаточно вместо имени открываемого файла указать :memory:


dmz>in-memory поддерживается и в MySQL; дело не в этом. Просто FastDB и GigaBase очень быстрые.

dmz>По моим ощущениям — много быстрее sqllite. Сравнений с замерами пока найти не могу — но если производительность важна, нужно сравнить в любом случае при выборе средства.

Просто "инмемори" не канает — данные у меня текут в огромном количестве и постоянно. Никакой мемори не хватит. Все равно рано или поздно придется писать на диск. Поэтому я думаю придется самому тестировать все эти движки на предмет создания ситуации, когда они пишут в БД и постоянно скидывают на диск (естественно, кэшировать кусок ни возбраняется).
[EOF]
Let it be! — Давайте есть пчелу!
Re[6]: SQLite++
От: dmz Россия  
Дата: 06.09.06 17:42
Оценка:
T>Просто "инмемори" не канает — данные у меня текут в огромном количестве и постоянно. T>Никакой мемори не хватит. T>Все равно рано или поздно придется писать на диск.

GigaBASE inherits most of the features of FastDB, but uses page pool instead of direct mapping of file on virtual memory. So GigaBASE is able to handle database, which size significantly exceeds size of computer physical memory.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.