Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
В общем, такой полуфиласофский вопрос.

Хочется под настройки, метаданные и всё, что не связано с данными, хранить в отдельной базе.
Вопрос в том, что выбрать?

От базы хочется:
- минимальные приседания для установки и переноса базы с места на место, наката патчей и т.п.
- наличие удобных инструментов для управления

Пока вижу два варианта:
1. текстовый файл, через ado. Но подозреваю, тут всё будет не очень удобно.
2. sqlite. Но надо что-то себе в код встраивать.

с обоими вариантами никогда не работал.

может ещё что-то?
25 янв 16, 08:18    [18724096]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dima T
Member

Откуда:
Сообщений: 13553
Еще можно XML, JSON, INI.
25 янв 16, 08:25    [18724110]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
Dima T,

xml как xml, или какой-то провайдер может с ним работать как с базой?
я думал про просто xml+boost, то хотелось бы работать с этим хранилищем именно через sql.
25 янв 16, 09:13    [18724199]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
3. MS Sql?
Только к нему нужен манагер.
25 янв 16, 09:54    [18724315]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
2. sqlite.
слишком дофига потенциальных языков и сред использования, оно всё, конечно, есть, но по несколько раз встраивать в разные среды не хочется.
25 янв 16, 10:09    [18724356]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dima T
Member

Откуда:
Сообщений: 13553
Ты бы немного поподробнее описал что за метаданные хранить собираешься и какой у них объем.

У меня для настроек используются INI. Есть WinAPI заточенное на быстрое чтение. Этих настроек обычно немного: пара десятков строк.
25 янв 16, 10:09    [18724358]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34424
CEMb,

sqlite

хотя json тоже очень хорошо было бы.
25 янв 16, 10:16    [18724380]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34424
CEMb,


Еще есть boost;::program-options или что-то в этом роде, там кажется можно тоже в файл записать опции как параметры, и оно это Парсит
25 янв 16, 10:20    [18724398]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6111
Думал насоветовать MSXML, но то что удобно в С#, в С++ очень тяжело пишется (

https://msdn.microsoft.com/en-us/library/ms767609(v=vs.85).aspx

Есть еще такой пример из dlib
http://dlib.net/config_reader_ex.cpp.html
25 янв 16, 11:00    [18724565]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
[quot]Ты бы немного поподробнее описал что за метаданные хранить собираешься и какой у них объем.
[quot]

Ну, например, названия колонок таблиц. В виде таблицы:

id_таблицы, номер_колонки, название, свойства, скрипт, ...

Или настройки соединений, в виде таблицы:

название, строка_коннекта, логин, пароль, свойства, скрипт, скрипт, скрипт, ...


пока остановился на текстовых файлах, потому что:
1. не требует лишних инсталляций
2. легко переносимо, даже частями, что может быть полезно
минусы:
1. редактирование, к примеру, если это csv, то запятую не поиспользуешь
25 янв 16, 11:29    [18724743]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4346
CEMb,
можно их вообще скриптом писать (LUA очень маленький)
25 янв 16, 11:33    [18724784]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
kealon(Ruslan),

таблицы?

а как lua интегрируется в с++ проекты? Давно хотел его погонять, всё не было случая...
25 янв 16, 11:42    [18724848]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4346
CEMb
kealon(Ruslan),

таблицы?

а как lua интегрируется в с++ проекты? Давно хотел его погонять, всё не было случая...

да просто там всё, на оффсайте есть вся инфа, функции просто свои к движку добавляешь
движок можно и слинковать и отдельной dll-кой

А по таблицам надо просто через свои функции описать их создание-валидацию. Если я правильно понимаю у тебя фактически метаинформация по ним, а не сами таблицы.
25 янв 16, 13:03    [18725296]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4346
CEMb,

пример на паскале, повыдёргивал из рабочего проекта, но на C, C++ будет тоже самое
+

//  открываем контекст и добавляем модули которые можно испольовать
  L:=lua_open();
  luaopen_base(L);                //* открывает основную библиотеку */
  luaopen_table(L);            //* открывает библиотеку table */
//  luaopen_io(L);               //* открывает библиотеку I/O */
  luaopen_string(L);           //* открывает библиотеку string */
  luaopen_math(L);             //* открывает библиотеку math */

// регистрируем свойю функцию
  lua_register(L,'print',@MyLUA_Print);

// здесь собственно сам вызов скрипта
  TestLUAException(luaL_loadfile(L, PChar(fn)));
  TestLUAException(lua_pcall(L, 0, LUA_MULTRET, 0));

  // закрываем контекст
  if Assigned(L) then begin
    lua_close(L);
  end;     
// функция-пример, просто объединяет все параметры в строку и выводит
function MyLUA_Print(L:Plua_State):Integer;cdecl;
var i,k:integer;
  s,t:string;
begin
  k:=lua_gettop(L);

  s:='';
  for i:=0 to k-1 do begin
    t:=lua_tostring(L, -(k-i));
    //if t='' then t:='{}';
    if s<>'' then begin
      s:=concat(s,' ',t);
    end else begin
      s:=t;
    end;
  end;
  lua_pop(L, k);

  Writeln(s);

  Result:=0;
end;
25 янв 16, 13:12    [18725341]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dima T
Member

Откуда:
Сообщений: 13553
CEMb
Ну, например, названия колонок таблиц. В виде таблицы:

id_таблицы, номер_колонки, название, свойства, скрипт, ...

Зачем свое хранилище под это?

Таблицы ведь где-то в СУБД? Пиши скрипт сразу на языке СУБД:
if not exists MyTable then create MyTable (...)
if not exists MyTable.Field1 then alter MyTable add Field1 ...
...

и запускай его при необходимости. Например при смене версии клиентского EXE.
Например при старте запросил версию из базы, сравнил с версией ЕХЕ, несовпало - запустил скрипт, сохранил версию в базу.

ИМХУ нет смысла структуру базы полностью дублировать в метаданные. У тебя юзеры руками в базе ковыряются и структуру таблиц меняют? Сомневаюсь.

Возьми за правило все изменения структуры делать этим скриптом, в т.ч. при разработке, тогда при необходимости что-то изменить в структуре просто дописал что надо изменить в конец скрипта и все.
25 янв 16, 13:44    [18725536]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47281

CEMb
Ну, например, названия колонок таблиц. В виде таблицы:

id_таблицы, номер_колонки, название, свойства, скрипт, ...

Вообще-то они уже и так хранятся в самой БД.

Posted via ActualForum NNTP Server 1.5

25 янв 16, 13:48    [18725575]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
Dima T,
я не могу так лезть в базу данных, там всё строго регламентировано, свои инструменты и "DBA inside" :)
Юзеры посредством админского софта там ковыряются и могут менять структуру таблиц. Это происходит редко, но происходит.
Структура БД у меня не копируется, а перекрывается и дополняется.

Dimitry Sibiryakov,
там специальные названия для колонок, их менять нельзя, они используются кодом базы данных и кодом прикладного софта(там даже на самом деле сложные views используются, которые генерятся самой БД с учётом разных факторов, ни у кого нет прямого доступа к таблицам). В самой базе данных есть метаданные по колонкам, названия, свойства для использования в прикладном софте.
Мне туда нельзя. Моя задумка: сделать стороннюю надстройку для себя. У меня появились задачи, которые существующий софт не решает. Свой код я напишу быстро, но чтобы всё отображалось красиво, нужны настройки для отображения. Их будет много, их лучше хранить в базе, в сторонней, иначе админы меня убьют, если что-то левое обнаружат.

Т.е. вопрос лезть или не лезть в основную базу, не стоИт :) Сами архитекторы давно мечтают вынести всю метаинформацию в отдельную базу данных, что позволит делать накаты, не затрагивая саму базу, а так же легко переносит базу с данными без учёта, какая версия прикладного софта сейчас установлена, и т.д. Т.е. по нормальному, отделить код и описание от самих данных. Но это стоит больших денег, никто на это просто так не согласится.

А я для себя персонально могу. У меня пока отдельные запросы и отображение данных, просто хочется красоты и больше функционала, и всё это сериализовать. Вопрос в том, как быстро и просто это сделать. Попробовал и решил пока остановиться на файлах.
26 янв 16, 07:22    [18728665]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
White Owl
Member

Откуда:
Сообщений: 12360
CEMb,

Ну тогда бери любой из вариантов которые ты упомянул в первом посте. Какой покажется более легким в реализации, тот и бери.
В описанной задаче они будут равноценными.
26 янв 16, 22:40    [18733277]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
CEMb
3. MS Sql

Мечты сбываются!.. купила бабка порося Картинка с другого сайта.

Итак, есть:
- база данных MSSQL, в винде, из коробки.
- приложение, которое работает с внешней базой данных, где много всякого.

хочется:
- создавать в локальной MSSQL копии некоторых данных внешней базы, чтобы не ходить полпланеты каждый раз за ними.
- чтобы приложение, открывшись первый раз и получив trusted_connection к master, могло создать себе базу и нужные таблицы в ней.

что пока получилось:
- Create database myBase - получаю permisson denied in database 'master'.

Возможно ли вообще любому приложению создать базу?
Т.е. я сейчас могу пойти в студию, там открыть SQL browser и там создать базу и выдать права, ок. Но я не могу это сделать у всех других пользователей софта.
Может быть можно сделать базу, сбакапить её, а потом как-то накатить из ресурсов программы?
С другой стороны, почему я в студии под доменным коннектом могу создать базу, а в приложении под тем же(?) коннектом - не могу? Может, connection string надо как-то правильно уметь готовить? Картинка с другого сайта.
15 апр 19, 06:50    [21861886]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dima T
Member

Откуда:
Сообщений: 13553
CEMb
Может, connection string надо как-то правильно уметь готовить?

Скорее всего проблема именно тут, т.к. все описанные проблемы только из-за отсутствия прав у того, кто указан в connection string.
15 апр 19, 08:41    [21861926]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
Dima T, ага, а как узнать, как правильно приготовить connection string? :)
Т.е. юзер с виндовой аутентификацией, хочет создать себе базу...
15 апр 19, 13:22    [21862424]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dima T
Member

Откуда:
Сообщений: 13553
Не пробовал, но вроде так
Driver={ODBC Driver 13 for SQL Server};server=<server>;database=<database>;trusted_connection=Yes;
15 апр 19, 13:30    [21862444]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47281

У него прав на создание базы нет, а не проблема с коннектом.

Posted via ActualForum NNTP Server 1.5

15 апр 19, 13:41    [21862471]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
CEMb
Member

Откуда: public T{};
Сообщений: 1883
Dima T
trusted_connection=Yes
пробовал, permission denied

Dimitry Sibiryakov
У него прав на создание базы нет, а не проблема с коннектом.
ну вот там вроде как можно на коннекте права получить.

я нашёл такое, что можно указать файл для создания базы данных для юзера, у которого вообще нет прав на машине. тут, но оно у меня выпадает с ошибкой на Integrated Security=true;
15 апр 19, 13:49    [21862482]     Ответить | Цитировать Сообщить модератору
 Re: Сервисная база данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47281

CEMb
ну вот там вроде как можно на коннекте права получить.

Это было бы слишком большой дырой в безопасности если бы любой пользователь мог положить
сервер тупо создав кучу баз и забив всё место на диске.

Posted via ActualForum NNTP Server 1.5

15 апр 19, 14:14    [21862520]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / C++ Ответить