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

Опыт db4o?

В настоящее время я тестирую db4o (java-версию), и мне очень нравится то, что я вижу. Но я не могу не задаться вопросом, как это происходит в реальной живой (веб-среде) среде. Кто-нибудь имеет опыт (хороший или плохой), чтобы поделиться о запуске db4o?

4b9b3361

Ответ 1

Мы запускаем версию DB40.NET в крупном проекте клиент/сервер.

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

Однако вам действительно нужно настроить ваши объекты, чтобы получить такую ​​производительность. Например, если у вас есть список, содержащий много объектов, активация этих списков DB4O выполняется медленно. Существует множество способов обойти эту проблему, например, путем инверсии отношения.

Другая боль - это активация. Когда вы извлекаете или удаляете объект из DB4O, по умолчанию он активирует все дерево объектов. Например, загрузка Foo будет загружать Foo.Bar.Baz.Bat и т.д. До тех пор, пока загрузка не будет оставлена. Хотя это хорошо с точки зрения программирования, производительность замедлит тем больше гнездования в ваших объектах. Чтобы повысить производительность, вы можете сообщить DB4O, сколько уровней нужно активировать. Это занимает много времени, если у вас много объектов.

Другой областью боли был поиск текста. Текстовый поиск DB4O далек, намного медленнее, чем индексирование полного текста SQL. (Они расскажут вам об этом прямо на своем сайте.) Хорошей новостью является то, что легко установить текстовый поисковый движок поверх DB4O. В нашем проекте мы подключили Lucene.NET для индексации текстовых полей, которые мы хотим.

Некоторые API-интерфейсы, похоже, не работают, например, API-интерфейсы GetField, полезные при применении обновлений баз. (Например, вы переименовали свойство и хотите обновить существующие объекты в базе данных, вам нужно использовать эти "рефлексивные" API для поиска объектов в базе данных. Другие API, такие как атрибут [Index] t работать в стабильной версии 6.4, и вместо этого вы должны указывать индексы с помощью Configure(). Index ( "someField" ), который не сильно типизирован.

Мы стали свидетелями того, как производительность ухудшила вашу базу данных. У нас есть база данных 1 ГБ прямо сейчас, и все по-прежнему быстро, но не так быстро, как когда мы начали с крошечной базы данных.

Мы обнаружили еще одну проблему, когда Db4O.GetByID закроет базу данных, если идентификатор больше не существует в базе данных.

Мы обнаружили, что синтаксис Native Query (самый естественный, встроенный в язык синтаксис для запросов) намного медленнее, чем менее дружественные запросы SODA. Поэтому вместо ввода:

// C# syntax for "Find all MyFoos with Bar == 23".
// (Note the Java syntax is more verbose using the Predicate class.)
IList<MyFoo> results = db4o.Query<MyFoo>(input => input.Bar == 23);

Вместо этого приятного кода запроса вы должны уродливый запрос SODA, основанный на строках и не сильно типизированный.

Для пользователей .NET они недавно представили провайдера LINQ-to-DB4O, который обеспечивает лучший синтаксис. Тем не менее, пока неясно, будет ли производительность работать с уродливыми запросами SODA.

Поддержка DB4O была приличной: мы разговаривали с ними по телефону несколько раз и получали полезную информацию. Их пользовательские форумы находятся рядом с бесполезными, однако почти все вопросы остаются без ответа. Их JIRA-трекер-трекер получает много внимания, поэтому, если у вас есть ворчащая ошибка, файл на JIRA на ней часто исправляется. (У нас было 2 ошибки, которые были исправлены, и еще один, который был исправлен полузакрытым способом.)

Если все это вас не испугало, позвольте мне сказать, что мы очень довольны DB4O, несмотря на проблемы, с которыми мы столкнулись. Производительность, которую мы получили, сдула некоторые системы O/RM, которые мы пробовали. Я рекомендую его.

обновление Июль 2015 Имейте в виду, этот ответ был написан еще в 2008 году. Хотя я ценю upvotes, мир изменился с тех пор, и эта информация может быть не столь надежной, как это было тогда это было написано.

Ответ 2

Большинство собственных запросов могут и эффективно преобразуются в запросы SODA за кулисами, поэтому это не должно меняться. Использование NQ, конечно, предпочтительнее, поскольку вы остаетесь в сфере строгого языка. Если у вас возникли проблемы с получением NQ для использования индексов, не стесняйтесь публиковать свою проблему на форумах db4o, и мы постараемся вам помочь.

Горан

Ответ 3

Основная проблема, с которой я столкнулся, - это отчетность. Кажется, что нет никакого способа запуска эффективных отчетов против источника данных db4o.

Ответ 4

Джуда, похоже, вы не используете прозрачную активацию, что является особенностью последней версии (7.4)? Возможно, если вы указали версию, которую используете, поскольку могут возникнуть другие проблемы, которые теперь разрешены в последней версии?