Firebird & Janus
От: Tonal- Россия www.promsoft.ru
Дата: 01.09.07 04:58
Оценка:
Вместе с Игорем Горбоносом (к сожалению не знаю его rsdn-ник), удалось разогнать работу Firebird & Janus.
Теперь синхронизация выполняется даже несколько быстрее чем в варианте с Jet.

250000 сообщений.
Размер базы (janus.mdb) для Jet — 424мб,
Размер базы (JANUS.FDB) для Firebird — 262мб

Firebird embeded 2.0.2.
FirebirdClient ADO.NET v2.1.0 Release Candidate 1 ( 2007-05-19 )

Заплатка для кода в каталоге svn://rsdn.ru/Janus/trunk/Janus/Core/DataManagement:
Index: DatabaseManager.cs
===================================================================
--- DatabaseManager.cs    (revision 730)
+++ DatabaseManager.cs    (working copy)
@@ -379,7 +379,7 @@
                 : string.Empty;
 
             string sql = string.Format(
-                @"INSERT INTO [messages] (
+                /*@"INSERT INTO [messages] (
                     [mid], [gid], [tid], [pid],
                     [dte], [usernick], [subject],
                     [uclass], [uid], [ismarked], [isread]
@@ -410,7 +410,8 @@
                                 msga.[tid] <> 0 AND msgb.[mid] IS Null AND msgc.[mid] IS Null
                                 {1}
                             GROUP BY
-                                msga.[tid])",
+                                msga.[tid])",*/
+        _scriptFactory.GetCreateMissingTopics,
                 (int)UserClass.User,
                 filter);
 
Index: ScriptFactory/FbScripts.cs
===================================================================
--- ScriptFactory/FbScripts.cs    (revision 730)
+++ ScriptFactory/FbScripts.cs    (working copy)
@@ -87,5 +87,45 @@
                         ti.[gid], srvf.[intop], srvf.[name], srvf.[descript]";
             }
         }
+
+    public override string GetCreateMissingTopics
+    {
+      get
+      {
+        return @"
+        INSERT INTO [messages] (
+                    [mid], [gid], [tid], [pid],
+                    [dte], [usernick], [subject],
+                    [uclass], [uid], [ismarked], [isread]
+                )
+                SELECT
+                    msg.[tid] AS [mid],
+                    msg.[gid],
+                    0         AS [tid],
+                    0         AS [pid],
+                    msg.[dte],
+                    '<<Oaiu iao a eieaeuiie AA>>' AS [usernick],
+                    msg.[subject],
+                    {0} AS [uclass],
+                    -1  AS [uid]," +
+          False + @" AS [ismarked]," +
+          False + @" AS [isread]
+                FROM
+                    [messages] msg
+          INNER JOIN (
+            SELECT
+                            Min(msga.[mid]) mid
+                        FROM
+                            ([messages] msga
+                                LEFT JOIN [messages] msgb on msga.[pid] = msgb.[mid])
+                                LEFT JOIN [messages] msgc on msga.[tid] = msgc.[mid]
+                        WHERE
+                            msga.[tid] <> 0 AND msgb.[mid] IS Null AND msgc.[mid] IS Null
+                            {1}
+                        GROUP BY
+                            msga.[tid]
+          ) as msgd on msgd.mid = msg.[mid]";
+      }
+    }
     }
 }
Index: ScriptFactory/SqlScriptFactory.cs
===================================================================
--- ScriptFactory/SqlScriptFactory.cs    (revision 730)
+++ ScriptFactory/SqlScriptFactory.cs    (working copy)
@@ -145,5 +145,45 @@
                             ) AS q ON q.[id] = srvf.[id]";
             }
         }
+
+    public virtual string GetCreateMissingTopics
+    {
+      get
+      {
+        return @"
+        INSERT INTO [messages] (
+                    [mid], [gid], [tid], [pid],
+                    [dte], [usernick], [subject],
+                    [uclass], [uid], [ismarked], [isread]
+                )
+                SELECT
+                    msg.[tid] AS [mid],
+                    msg.[gid],
+                    0         AS [tid],
+                    0         AS [pid],
+                    msg.[dte],
+                    '<<Oaiu iao a eieaeuiie AA>>' AS [usernick],
+                    msg.[subject],
+                    {0} AS [uclass],
+                    -1  AS [uid]," +
+                    False + @" AS [ismarked]," +
+                    False + @" AS [isread]
+                FROM
+                    [messages] msg
+                WHERE
+                    msg.[mid] IN
+                        (SELECT
+                            Min(msga.[mid])
+                        FROM
+                            ([messages] msga
+                                LEFT JOIN [messages] msgb on msga.[pid] = msgb.[mid])
+                                LEFT JOIN [messages] msgc on msga.[tid] = msgc.[mid]
+                        WHERE
+                            msga.[tid] <> 0 AND msgb.[mid] IS Null AND msgc.[mid] IS Null
+                            {1}
+                        GROUP BY
+                            msga.[tid])";
+      }
+    }
     }
 }
... << RSDN@Home 1.2.0 alpha rev. 730>>
Re: Firebird & Janus
От: Дьяченко Александр Россия  
Дата: 01.09.07 07:44
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Вместе с Игорем Горбоносом (к сожалению не знаю его rsdn-ник), удалось разогнать работу Firebird & Janus.

T>Теперь синхронизация выполняется даже несколько быстрее чем в варианте с Jet.

Вобщем в связи с моими правками там уже все не так, и патч не наложишь.
Вроде я все переделал примерно как в патче (r733 — посмотри проверь)
... << RSDN@Home 1.2.0 alpha rev. 732>>
Re[2]: Firebird & Janus
От: Mamut Швеция http://dmitriid.com
Дата: 01.09.07 08:02
Оценка:
T>>Вместе с Игорем Горбоносом (к сожалению не знаю его rsdn-ник), удалось разогнать работу Firebird & Janus.
T>>Теперь синхронизация выполняется даже несколько быстрее чем в варианте с Jet.

ДА>Вобщем в связи с моими правками там уже все не так, и патч не наложишь.

ДА>Вроде я все переделал примерно как в патче (r733 — посмотри проверь)

*восхищенно и с одобрением* вы все — извращенцы


dmitriid.comGitHubLinkedIn
Re[2]: Firebird & Janus
От: Tonal- Россия www.promsoft.ru
Дата: 02.09.07 16:51
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Вобщем в связи с моими правками там уже все не так, и патч не наложишь.
ДА>Вроде я все переделал примерно как в патче (r733 — посмотри проверь)
Посмотрел — работает.
Всё правильно. Спасибо.
... << RSDN@Home 1.2.0 alpha rev. 735>>
Re: Firebird & Janus
От: pigeon Великобритания
Дата: 03.09.07 06:48
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Вместе с Игорем Горбоносом (к сожалению не знаю его rsdn-ник), удалось разогнать работу Firebird & Janus.

T>Теперь синхронизация выполняется даже несколько быстрее чем в варианте с Jet.

[...]
Родина должна знать своих героев . Его ник на RSDN igor_123
Premature optimization is the root of all evil in programming. Donald Knuth
Re[2]: Firebird & Janus
От: michus Россия  
Дата: 04.09.07 16:55
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Вроде я все переделал примерно как в патче (r733 — посмотри проверь)


Попробовал базу Fb "с нуля". Получил ошибку:

BLToolkit.Data.DataException: Dynamic SQL Error
SQL error code = -104
Token unknown — line 20, char 10
SELECT ---> FirebirdSql.Data.FirebirdClient.FbException: Dynamic SQL Error
SQL error code = -104
Token unknown — line 20, char 10
SELECT ---> FirebirdSql.Data.Common.IscException: Выдано исключение типа "FirebirdSql.Data.Common.IscException".
в FirebirdSql.Data.Client.Embedded.FesDatabase.ParseStatusVector(Int32[] statusVector)
в FirebirdSql.Data.Client.Embedded.FesStatement.Prepare(String commandText)
в FirebirdSql.Data.FirebirdClient.FbCommand.Prepare(Boolean returnsSet)
в FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteCommand(CommandBehavior behavior, Boolean returnsSet)
в FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteCommand(CommandBehavior behavior)
в FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteScalar()
--- Конец трассировки внутреннего стека исключений ---
в FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteScalar()
в BLToolkit.Data.DbManager.ExecuteScalar()
--- Конец трассировки внутреннего стека исключений ---
в BLToolkit.Data.DbManager.OnOperationException(OperationType op, Exception ex)
в BLToolkit.Data.DbManager.ExecuteScalar()
в BLToolkit.Data.DbManager.ExecuteScalar[T]()
в Rsdn.Janus.JanusDB.ExecuteScalar[T](JanusDB db, String sql, Object[] parameters) в C:\Projects\RSDN@Home\trunk2\Janus\Core\DataManagement\JanusDB.cs:строка 236
в Rsdn.Janus.DatabaseManager.CreateMissingTopics(JanusDB db, String stringizedBatch) в C:\Projects\RSDN@Home\trunk2\Janus\Core\DataManagement\DatabaseManager.cs:строка 356
в Rsdn.Janus.DatabaseManager.<>c__DisplayClass1.<UpdateAggregats>b__0(String stringizedBatch) в C:\Projects\RSDN@Home\trunk2\Janus\Core\DataManagement\DatabaseManager.cs:строка 99
в Rsdn.Janus.Framework.Algorithms.StringizedCollectionApplyer[T](IEnumerable`1 collection, Int32 maxBatchSize, StringizedListVisitor visitor) в C:\Projects\RSDN@Home\trunk2\Janus\Framework\Utils\Algorithms.cs:строка 164
в Rsdn.Janus.DatabaseManager.UpdateAggregats(JanusDB db, Int32 userId, IEnumerable`1 tidList) в C:\Projects\RSDN@Home\trunk2\Janus\Core\DataManagement\DatabaseManager.cs:строка 95
в Rsdn.Janus.DatabaseManager.UpdateAggregates(JanusDB db, Int32 userId, IEnumerable`1 tbls) в C:\Projects\RSDN@Home\trunk2\Janus\Core\DataManagement\DatabaseManager.cs:строка 138
в Rsdn.Janus.Synchronizer.ProcessSvcResponse(JanusResponse svcResp, ResolveBrokenTopicsHint resolver) в C:\Projects\RSDN@Home\trunk2\Janus\Core\Synchronization\Synchronizer.cs:строка 796
в Rsdn.Janus.Synchronizer.Sync(JanusSvcEx svc) в C:\Projects\RSDN@Home\trunk2\Janus\Core\Synchronization\Synchronizer.cs:строка 337


Запрос в котором происходит ошибка — тот, что подвергся оптимизации.
... << RSDN@Home 1.2.0 alpha rev. 743>>
Re[3]: Firebird & Janus
От: Дьяченко Александр Россия  
Дата: 05.09.07 01:38
Оценка:
Здравствуйте, michus, Вы писали:

ДА>>Вроде я все переделал примерно как в патче (r733 — посмотри проверь)

M>Попробовал базу Fb "с нуля". Получил ошибку:

Фиг знает раньше вроде создавалась. Вечером приду домой разберусь.
... << RSDN@Home 1.2.0 alpha rev. 743>>
Re[4]: Firebird & Janus
От: michus Россия  
Дата: 05.09.07 03:36
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Здравствуйте, michus, Вы писали:


ДА>>>Вроде я все переделал примерно как в патче (r733 — посмотри проверь)

M>>Попробовал базу Fb "с нуля". Получил ошибку:

ДА>Фиг знает раньше вроде создавалась. Вечером приду домой разберусь.


Ошибка возникает не при создании. Она возникает при синхронизации. В DatabaseManager.CreateMissingTopics.
... << RSDN@Home 1.2.0 alpha rev. 744>>
Re[3]: Firebird & Janus
От: Tonal- Россия www.promsoft.ru
Дата: 05.09.07 04:00
Оценка:
Здравствуйте, michus, Вы писали:
M>Попробовал базу Fb "с нуля". Получил ошибку:
Вполне естественно.
С Janus-ом до сих пор лежит версия 1.5.х. она не понимает вложенных запросов в секциях from и join
Я делал оптимизацию под 2.0.х (2.0.1)
О чём и написал.
Кроме того, у меня стоит провайдер новее чем тот, который идёт с Janus-ом.

Так что, по хорошему, нужно обновлять также и зависимости.
... << RSDN@Home 1.2.0 alpha rev. 744>>
Re[5]: Firebird & Janus
От: Дьяченко Александр Россия  
Дата: 05.09.07 04:16
Оценка:
Здравствуйте, michus, Вы писали:

ДА>>>>Вроде я все переделал примерно как в патче (r733 — посмотри проверь)

M>>>Попробовал базу Fb "с нуля". Получил ошибку:
ДА>>Фиг знает раньше вроде создавалась. Вечером приду домой разберусь.
M>Ошибка возникает не при создании. Она возникает при синхронизации. В DatabaseManager.CreateMissingTopics.

Странно, вроде человек отписысывался что все работает (Re[2]: Firebird &amp; Janus
Автор: Tonal-
Дата: 02.09.07
).
... << RSDN@Home 1.2.0 alpha rev. 743>>
Re[4]: Firebird & Janus
От: L_VV  
Дата: 05.09.07 06:44
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Здравствуйте, michus, Вы писали:

M>>Попробовал базу Fb "с нуля". Получил ошибку:
T>Вполне естественно.
T>С Janus-ом до сих пор лежит версия 1.5.х. она не понимает вложенных запросов в секциях from и join
T>Я делал оптимизацию под 2.0.х (2.0.1)
T>О чём и написал.
T>Кроме того, у меня стоит провайдер новее чем тот, который идёт с Janus-ом.

T>Так что, по хорошему, нужно обновлять также и зависимости.


Заменил fbembed (все файлы) из архива Janus'а (r744) на 2.1 RC 2 (то же самое и с 2.0.3).
При попытке создания новой БД или реструктуризации существующей, вываливается ошибка
"Unable to load DLL 'fbembed': The specified module could not be found. (Exception from HRESULT: 0x8007007E)".

Если же создаю БД используя remote сервер 2.1 (или 2.0.3), то БД создается, но после ее создания
появляется ошибка "Offset and length were out of bounds for the array or count is greater
than the number of elements from index to the end of the source collection."

При нажатии на кнопку Connect, если выбран remote сервер, ничего не происходит.

Что посоветуете?
Re[5]: Firebird & Janus
От: Tonal- Россия www.promsoft.ru
Дата: 05.09.07 07:39
Оценка:
Здравствуйте, L_VV, Вы писали:
L_V>Заменил fbembed (все файлы) из архива Janus'а (r744) на 2.1 RC 2 (то же самое и с 2.0.3).
L_V>При попытке создания новой БД или реструктуризации существующей, вываливается ошибка
L_V>"Unable to load DLL 'fbembed': The specified module could not be found. (Exception from HRESULT: 0x8007007E)".
Всё верно.
Для 2.1 нету варианта embeded
А для 2.0.3 нужно брать архив Firebird-2.0.3.12981-0-RC1_embed_win32.zip

Но я бы вам всё таки советовал 2.0.1 — всё ж релиз.

L_V>Если же создаю БД используя remote сервер 2.1 (или 2.0.3), то БД создается, но после ее создания

L_V>появляется ошибка "Offset and length were out of bounds for the array or count is greater
L_V>than the number of elements from index to the end of the source collection."

L_V>При нажатии на кнопку Connect, если выбран remote сервер, ничего не происходит.


А сервер то запущен?
Если да, то на какой машине и какой версии?

P.S.
Я пробывал на embeded вермсиях 2.0.1 и 2.0.2 — всё нормально работало...
... << RSDN@Home 1.2.0 alpha rev. 744>>
Re[6]: Firebird & Janus
От: L_VV  
Дата: 05.09.07 08:17
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Всё верно.

T>Для 2.1 нету варианта embeded
Почему нет? Есть в снапшотах, например, вчерашний: http://www.firebirdsql.org/download/snapshot_builds/win/Firebird-2.1.0.16459-0_win32_embed.zip

T>А для 2.0.3 нужно брать архив Firebird-2.0.3.12981-0-RC1_embed_win32.zip

Да, его и пробовал

T>Но я бы вам всё таки советовал 2.0.1 — всё ж релиз.

Попробовал. Всё то же самое

L_V>>Если же создаю БД используя remote сервер 2.1 (или 2.0.3), то БД создается, но после ее создания

L_V>>появляется ошибка "Offset and length were out of bounds for the array or count is greater
L_V>>than the number of elements from index to the end of the source collection."

L_V>>При нажатии на кнопку Connect, если выбран remote сервер, ничего не происходит.


T>А сервер то запущен?

Конечно

T>Если да, то на какой машине и какой версии?

localhost, Firebird-2.1.0.16451

T>P.S.

T>Я пробывал на embeded вермсиях 2.0.1 и 2.0.2 — всё нормально работало...
Увы
Не хочет...
Re[7]: Firebird & Janus
От: Tonal- Россия www.promsoft.ru
Дата: 05.09.07 09:38
Оценка:
Здравствуйте, L_VV, Вы писали:
T>>Но я бы вам всё таки советовал 2.0.1 — всё ж релиз.
L_V>Попробовал. Всё то же самое
Таки похоже какой-то dll-ки не хватает.
Вот список нужных фаулов:

T>>А сервер то запущен?

L_V>Конечно

T>>Если да, то на какой машине и какой версии?

L_V>localhost, Firebird-2.1.0.16451
Попробую вечером...
... << RSDN@Home 1.2.0 alpha rev. 744>>
Re[6]: Firebird & Janus
От: L_VV  
Дата: 05.09.07 09:40
Оценка:
T>Я пробывал на embeded вермсиях 2.0.1 и 2.0.2 — всё нормально работало...
Можете скинуть мне архив вашего рабочего Janus'а (ну, без БД, естественно)
вместе с FB embedded (т.е. каталог RSDN@Home)? Может, всё заработает?
l_v_v собака mail точка ru
Re[8]: Firebird & Janus
От: L_VV  
Дата: 05.09.07 10:03
Оценка:
T>Таки похоже какой-то dll-ки не хватает.
T>Вот список нужных фаулов:
T>
Да, точно, не хватало трех icu*.dll. Совсем забыл, что в двойке нужны еще и они.
А вот msv*.dll вроде как не обязательны, во всяком случае в README_embedded.txt
они не упоминаются и всё вроде работает.

Но теперь следующая проблема — БД с embedded создалась, жмём OK для подключения и:
Rsdn.Janus.DBSchemaException: Ошибка на этапе реструктуризации базы:
Error when prepared SqlDiff
at Rsdn.Janus.DbsmManager.Restruct(IGenericServiceProvider serviceProvider)
at Rsdn.Janus.Janus.Main()
Что нужно ещё?
Re[8]: Firebird & Janus
От: L_VV  
Дата: 05.09.07 10:14
Оценка:
Кстати, сейчас если выбрать remote сервер, подключение к БД по нажатию
на кнопку Connect вроде бы происходит, хотя цвет кнопки не меняется и не
активизируется кнопка OK, но по Cancel также как и с embedded выполняется
попытка реструктуризации БД и возникает такая же ошибка:
Rsdn.Janus.DBSchemaException: Ошибка на этапе реструктуризации базы:
Error when prepared SqlDiff
at Rsdn.Janus.DbsmManager.Restruct(IGenericServiceProvider serviceProvider)
at Rsdn.Janus.Janus.Main()
Re[7]: Firebird & Janus
От: L_VV  
Дата: 06.09.07 05:34
Оценка:
Спасибо, получил! Ваш вариант работает.
Попробую понять, почему мой не хочет.
Re[8]: Firebird & Janus
От: L_VV  
Дата: 06.09.07 05:57
Оценка:
Есть явное отличие:
у меня в каталоге RSDN@Home есть файл FirebirdSql.Data.Firebird.dll (14.08.2007 16:17:10, размер 618496), у вас его нет.
Если я у себя удаляю его, при нажатии на OK после подключения к БД вылетает exception:

System.IO.FileNotFoundException: Could not load file or assembly 'FirebirdSql.Data.Firebird, Version=2.0.0.0, Culture=neutral, PublicKeyToken=fa843d180294369d' or one of its dependencies. The system cannot find the file specified.
File name: 'FirebirdSql.Data.Firebird, Version=2.0.0.0, Culture=neutral, PublicKeyToken=fa843d180294369d'
at Rsdn.Janus.FbDriver.CheckConnectionString(String constr)
at Rsdn.Janus.DbsmManager.CheckDB(IGenericServiceProvider serviceProvider)
at Rsdn.Janus.Janus.Main()


Может, именно из-за этой dll-ки была ошибка:
Rsdn.Janus.DBSchemaException: Ошибка на этапе реструктуризации базы:
Error when prepared SqlDiff
at Rsdn.Janus.DbsmManager.Restruct(IGenericServiceProvider serviceProvider)
at Rsdn.Janus.Janus.Main()

Может быть, нужна более новая версия библиотеки? Если да, можете выслать?

Если имеет значение, VS на моей машине не установлена.
Re[9]: Firebird & Janus
От: L_VV  
Дата: 06.09.07 06:52
Оценка:
Так, всё более менее прояснилось:
FirebirdSql.Data.Firebird.dll здесь не причём.

Проблема с версией FB —
на версии 2.x всё работает правильно (в т.ч. на последней сборке Firebird-2.0.3.12981);
на версии 2.1.x — не работает — возникает исключение:
Rsdn.Janus.DBSchemaException: Ошибка на этапе реструктуризации базы:
Error when prepared SqlDiff
at Rsdn.Janus.DbsmManager.Restruct(IGenericServiceProvider serviceProvider)
at Rsdn.Janus.Janus.Main()

Может, можно будет посмотреть, в чём там дело? В 2.1 всё-таки можно мониторить запросы и
в оптимизаторе изменения были, может работа Janus'а немного ускориться?
Re[10]: Firebird & Janus
От: Tonal- Россия www.promsoft.ru
Дата: 06.09.07 08:26
Оценка:
Здравствуйте, L_VV, Вы писали:

L_V>Так, всё более менее прояснилось:

L_V>FirebirdSql.Data.Firebird.dll здесь не причём.
L_V>Проблема с версией FB -
L_V>на версии 2.x всё работает правильно (в т.ч. на последней сборке Firebird-2.0.3.12981);
L_V>на версии 2.1.x — не работает — возникает исключение:
Похоже таки проблема с провайдером.
В 2.1, насколько я в курсе, несколько менялся протокол, и провайдер глючил на этом.
У меня он установлен отдельно, v2.1.0 Release Candidate 1 ( 2007-05-19 ) размер 634880б. время создания 18.03.07.

Я сейчас пишу с Janus-а работающего с fbembed.dll 2.1.0.16459 [2.1.0.16459]
... << RSDN@Home 1.2.0 alpha rev. 744>>
Re[11]: Firebird & Janus
От: L_VV  
Дата: 06.09.07 08:57
Оценка:
T>Похоже таки проблема с провайдером.
T>В 2.1, насколько я в курсе, несколько менялся протокол, и провайдер глючил на этом.
T>У меня он установлен отдельно, v2.1.0 Release Candidate 1 ( 2007-05-19 ) размер 634880б. время создания 18.03.07.

T>Я сейчас пишу с Janus-а работающего с fbembed.dll 2.1.0.16459 [2.1.0.16459]


Странно. У меня тоже установлен провайдер версии 2.1, правда RC2:
http://downloads.sourceforge.net/firebird/FirebirdClient-2.1.0-RC2.msi
(только что попробовал с RC1 — то же самое) — не работает.
Я взял ваш exe-шник Janus'а (т.к. тот, что идёт в зипе — ищет именно
FirebirdSql.Data.Firebird.dll из этого же архива).
Может, попробуем ваш архив RSDN@Home с fbembedded 2.1?
Уже просто интересно, в чём же дело.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.