RSDN@Home и SQLite
От: Дьяченко Александр Россия  
Дата: 26.08.07 12:29
Оценка: 88 (7)
По прозьбам трудящихся как и обещял посмотрел что с SQLite (Re[5]: [офф] FB выкидываем — что делать?
Автор: Дьяченко Александр
Дата: 23.08.07
). Пора подводить итоги 18 часового марафона борьбы с SQLite, итак:
Теперь о хорошем что же сделано:
Теперь снова о плохом:
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re: RSDN@Home и SQLite
От: Дьяченко Александр Россия  
Дата: 27.08.07 09:23
Оценка:
За оценки конечно спасибо. Если кто поможет/подскажет что делать с вот этим:
ДА> То в течении недели я добил бы и выложил бы куда-нить, то что получилось.
Заодно попробывал бы избавится от применения enum-а DbEngineType везде кроме реструктуризатора (сильно портит нервы при добавлении новой БД), в принципе в реструктуризаторе тоже наверно можно избавится, но туда у меня лезть особого желания нет.
Шаги в данном направлении сделаны в части моего кода надо переписать слегка остальные.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re[2]: RSDN@Home и SQLite
От: Блудов Павел Россия  
Дата: 27.08.07 10:54
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>За оценки конечно спасибо. Если кто поможет/подскажет что делать с вот этим:

ДА>То в течении недели я добил бы и выложил бы куда-нить, то что получилось.
Так скажи, где можно пощупать то, что уже есть?
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re[3]: RSDN@Home и SQLite
От: Дьяченко Александр Россия  
Дата: 27.08.07 11:44
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

ДА>>За оценки конечно спасибо. Если кто поможет/подскажет что делать с вот этим:

ДА>>То в течении недели я добил бы и выложил бы куда-нить, то что получилось.
БП>Так скажи, где можно пощупать то, что уже есть?

На RSDN места не хватает. выкладываю на filepost.ru — здесь
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re[3]: RSDN@Home и SQLite
От: Дьяченко Александр Россия  
Дата: 27.08.07 11:48
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

ДА>>За оценки конечно спасибо. Если кто поможет/подскажет что делать с вот этим:

ДА>>То в течении недели я добил бы и выложил бы куда-нить, то что получилось.
БП>Так скажи, где можно пощупать то, что уже есть?

На RSDN места не хватает. выкладываю на filepost.ru — здесь. Там исходники + маленькая БД (пользователи + форумы + достаточно свежие LastVersion в таблице vars) если с нуля при синхронизации пытается выкачать 80 метров (из-за вырезания TOP-ов наверное) а мне через мобильнк такое не выкачать.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Не выходит
От: Блудов Павел Россия  
Дата: 29.08.07 02:57
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>выкладываю на filepost.ru

Не получается у меня от туда скачать. Ни хотя бы зарегистрироваться.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re: Не выходит
От: Дьяченко Александр Россия  
Дата: 29.08.07 03:56
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

ДА>>выкладываю на filepost.ru

БП>Не получается у меня от туда скачать. Ни хотя бы зарегистрироваться.

Ну давай попробую еще раз на другой ресурс.
здесь

Или скажи куда можно выложить.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Получилось
От: Блудов Павел Россия  
Дата: 29.08.07 09:58
Оценка: 2 (1)
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>здесь

Отсюда без проблем. Вообще, лучший файлообменник это gmalfs но rapidshare тоже ничего.
Вобщем всё скачалось и собралось. Буду пробовать.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Это by design.
От: Блудов Павел Россия  
Дата: 29.08.07 10:40
Оценка: 15 (1)
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>
  • Ну и наконец самое неприятное при синхронизации валится в самом конце при обновлении LastVersion-ов в таблице vars с сообщением о блокировке БД.

    Это вобщем-то легко объяснимо: в Janus\Core\Synchronization\Synchronizer.cs в методе ProcessSvcResponse имеем
    using (JanusDB db = new JanusDB())
    {
        db.BeginTransaction();
        
        // ...
        
        DBVars.Instance["LastRatingRowVersion"] = SpecialByteConvertor.ToString(svcResp.lastRatingRowVersion);
        DBVars.Instance["LastForumRowVersion"]  = SpecialByteConvertor.ToString(svcResp.lastForumRowVersion);
    
        // ...
        
        db.ComminTransaction();
    }


    Так вот, при попытке присвоить значение переменной, хранящейся в БД (DBVars.Instance = smth) создаётся параллельный Update в своём собственном JanusDB.
    А вот этого-то SQLite и не может.

    Если эти две строчки тупо вынести за Using (один фиг они выполняются сами по себе и не синхронизованы с основной транзакцией) то всё работает.
    Ну, почти всё. В Janus\Core\DataManagement\DatabaseManager.cs в методе UpdateTopicInfoByFilter имеем
    if (!string.IsNullOrEmpty(filter))
        sql = sql + "AND " + filter;

    а должно быть
    if (!string.IsNullOrEmpty(filter))
        sql = sql + " AND " + filter;


    Иначе "AND" приклеивается к завершающемуся "= 0" и получается синтаксическая ошибка.

    Дальше всё пучком кроме того что sqlite теряет колонку mid на Join'е. Но это я так понял ты уже научился побеждать.
    Если нет — пиши будет вместе думать.
    ... << RSDN@Home 1.2.0 alpha rev. 726>>
  • Re: Это by design.
    От: Дьяченко Александр Россия  
    Дата: 29.08.07 11:24
    Оценка:
    Здравствуйте, Блудов Павел, Вы писали:

    ДА>>
  • Ну и наконец самое неприятное при синхронизации валится в самом конце при обновлении LastVersion-ов в таблице vars с сообщением о блокировке БД.

    БП>Это вобщем-то легко объяснимо: в Janus\Core\Synchronization\Synchronizer.cs в методе ProcessSvcResponse имеем

    БП>
    БП>using (JanusDB db = new JanusDB())
    БП>{
    БП>    db.BeginTransaction();
        
    БП>    // ...
        
    БП>    DBVars.Instance["LastRatingRowVersion"] = SpecialByteConvertor.ToString(svcResp.lastRatingRowVersion);
    БП>    DBVars.Instance["LastForumRowVersion"]  = SpecialByteConvertor.ToString(svcResp.lastForumRowVersion);
    
    БП>    // ...
        
    БП>    db.ComminTransaction();
    БП>}
    БП>


    БП>Так вот, при попытке присвоить значение переменной, хранящейся в БД (DBVars.Instance = smth) создаётся параллельный Update в своём собственном JanusDB.

    БП>А вот этого-то SQLite и не может.

    странно вроде работа паралельная заявлена или она одно из обращений блокирует при этом (а так как из одного потока, то первое обращение блокирует а второе где как раз происходит запись в vars получает отлуп)?

    БП>Если эти две строчки тупо вынести за Using (один фиг они выполняются сами по себе и не синхронизованы с основной транзакцией) то всё работает.

    БП>Ну, почти всё. В Janus\Core\DataManagement\DatabaseManager.cs в методе UpdateTopicInfoByFilter имеем
    БП>
    БП>if (!string.IsNullOrEmpty(filter))
    БП>    sql = sql + "AND " + filter;
    БП>

    БП>а должно быть
    БП>
    БП>if (!string.IsNullOrEmpty(filter))
    БП>    sql = sql + " AND " + filter;
    БП>


    БП>Иначе "AND" приклеивается к завершающемуся "= 0" и получается синтаксическая ошибка.


    это я не трогал.

    БП>Дальше всё пучком кроме того что sqlite теряет колонку mid на Join'е. Но это я так понял ты уже научился побеждать.

    БП>Если нет — пиши будет вместе думать.

    Ок. Буду дальше ковырять. Я наверно у DBVars сделаю еще один индексатор с 2 параметрами JanusDB и string так наверно правильнее будет (а не выносить за using).
    ... << RSDN@Home 1.2.0 alpha rev. 726>>
  • Re: RSDN@Home и SQLite
    От: Дьяченко Александр Россия  
    Дата: 29.08.07 18:27
    Оценка: 28 (1)
    Обновленный вариант, переделал запросы надуюсь все (но может что забыл) проверял:
    Забирать здесь
    ... << RSDN@Home 1.2.0 alpha rev. 730>>
    Re[2]: RSDN@Home и SQLite
    От: rameel https://github.com/rsdn/CodeJam
    Дата: 29.08.07 19:02
    Оценка:
    Здравствуйте, Дьяченко Александр, Вы писали:

    ДА>Забирать здесь


    Не скачивается. Может лучше у AndrewVK за доступом в репозитории, а там можно и бранч сделать, много удобнее будет, чем каждый раз файлы заливать
    ... << RSDN@Home 1.2.0 alpha rev. 730 >>
    Re[3]: RSDN@Home и SQLite
    От: Дьяченко Александр Россия  
    Дата: 30.08.07 00:57
    Оценка:
    Здравствуйте, rameel, Вы писали:

    ДА>>Забирать здесь


    R>Не скачивается. Может лучше у AndrewVK за доступом в репозитории, а там можно и бранч сделать, много удобнее будет, чем каждый раз файлы заливать


    Попробуй с другого места у меня вроде дает скачать, к тому же написано что скачано 4 раза.
    Да через SVN было бы лучше. Ладно попробую написать AndrewVK.
    ... << RSDN@Home 1.2.0 alpha rev. 726>>
    Re[2]: Это by design.
    От: Блудов Павел Россия  
    Дата: 30.08.07 03:23
    Оценка: 5 (1)
    Здравствуйте, Дьяченко Александр, Вы писали:

    БП>>Так вот, при попытке присвоить значение переменной, хранящейся в БД (DBVars.Instance = smth) создаётся параллельный Update в своём собственном JanusDB.

    БП>>А вот этого-то SQLite и не может.

    ДА>странно вроде работа паралельная заявлена или она одно из обращений блокирует при этом (а так как из одного потока, то первое обращение блокирует а второе где как раз происходит запись в vars получает отлуп)?


    Заявлено паралельное чтение. А запись только в одни руки.

    ДА>Я наверно у DBVars сделаю еще один индексатор с 2 параметрами JanusDB и string так наверно правильнее будет (а не выносить за using).

    +1.
    ... << RSDN@Home 1.2.0 alpha rev. 726>>
    Re[3]: Это by design.
    От: Дьяченко Александр Россия  
    Дата: 30.08.07 03:52
    Оценка:
    Здравствуйте, Блудов Павел, Вы писали:

    ДА>>странно вроде работа паралельная заявлена или она одно из обращений блокирует при этом (а так как из одного потока, то первое обращение блокирует а второе где как раз происходит запись в vars получает отлуп)?

    БП>Заявлено паралельное чтение. А запись только в одни руки.

    Спасибо, не заметил.
    ... << RSDN@Home 1.2.0 alpha rev. 726>>
    Re: RSDN@Home и SQLite
    От: 0rc Украина  
    Дата: 30.08.07 15:17
    Оценка:
    Здравствуйте, Дьяченко Александр, Вы писали:

    Супер. Это по теме. Теперь вопрос. Кто-нибудь делал сравнительную характеристику, насколько быстрее медленее будет работать RSDN@Home с SQLLite по сравнению с MSSQL 2000?
    ... << RSDN@Home 1.2.0 alpha rev. 725>>
    Re[2]: RSDN@Home и SQLite
    От: rameel https://github.com/rsdn/CodeJam
    Дата: 30.08.07 16:08
    Оценка:
    Здравствуйте, 0rc, Вы писали:

    0rc>Супер. Это по теме. Теперь вопрос. Кто-нибудь делал сравнительную характеристику, насколько быстрее медленее будет работать RSDN@Home с SQLLite по сравнению с MSSQL 2000?


    ИМХО, сравнивать еще не с чем. По моему еще не все запросы отлажены до конца. Вот когда дойдет до рабочего состояния, тогда может попробую импортнуть данные в базу и сравнить характеристики.
    ... << RSDN@Home 1.2.0 alpha rev. 730 >>
    select top #
    От: Блудов Павел Россия  
    Дата: 31.08.07 01:58
    Оценка: 12 (1)
    Здравствуйте, Дьяченко Александр, Вы писали:

    ДА>
  • В виду того что TOP не поддерживается пришлось переделать в ScriptFactory свойство Top в метод Top(expression) и выдавать в нем пустую строку, поидее надо также во всех местах где он используется результат обрезать руками (не зделано).
    Здесь
    Автор: Веселый кролик
    Дата: 29.08.07
    говорят что поддерживается, только называется LIMIT.
    У Оракла, катсти, TOP называется FETCH FIRST ### ROWS ONLY и тоже пишется в конце.

    В связи с чем идея: вынести поддержку SELECT TOP в провайдера.
    Например провайдеру передаётся
    string topQuery = db.DataProvider.FormatSelect("* FROM SomeTable WHERE 1 > 0 AND 0=0", 50);

    А на выходе из DataProvider.FormatSelect имеем либо
    "SELECT TOP 50 * FROM SomeTable WHERE 1 > 0 AND 0=0"
    либо
    "SELECT * FROM SomeTable WHERE 1 > 0 AND 0=0 LIMIT 50"
    либо исключение о том, что метод не поддерживается.
    ... << RSDN@Home 1.2.0 alpha rev. 726>>
  • Поправочка
    От: Блудов Павел Россия  
    Дата: 31.08.07 03:18
    Оценка:
    Здравствуйте, Блудов Павел, Вы писали:

    БП>У Оракла, катсти, TOP называется FETCH FIRST ### ROWS ONLY и тоже пишется в конце.

    DB2, конечно. У Оракла страый добрый

    SELECT * FROM (<original query>) WHERE ROWNUM < ###

    У FireBird SELECT FIRST ###. Вощем кто во что горазд.
    ... << RSDN@Home 1.2.0 alpha rev. 726>>
    Re: select top #
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 31.08.07 04:24
    Оценка:
    Здравствуйте, Блудов Павел, Вы писали:
    БП>В связи с чем идея: вынести поддержку SELECT TOP в провайдера.
    Альтернативная идея: внести поддержку Firebird, LiteSQL и Oracle в Linq. Там есть Take() и Skip()
    БП>Например провайдеру передаётся
    ... << RSDN@Home 1.2.0 alpha rev. 677>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.