Re[15]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 06:39
Оценка:
Alexey Rovdo пишет:

> Мне кажется, что производители коммерческих продуктов берутся за все

> это только по одной причине — желание соответствовать как можно
> большему числу стандартов. Проприетарные решения не в чести у
> покупателей, а альтернативы у ODMG пока нет (хотя бурное развитие JDO
> можно рассматривать как заявку — и этот путь, полагаю, более верен,
> чем путь ODMG).

Кхе, кхе. Может стоит посмотреть на RealLife(tm)? В мире Java сейчас
рулит Hibernate для OR-maping'а, JDO не прижился и не особо используется.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[15]: Объектные базы как они есть
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.04.05 07:24
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>А что, если модель сложная, то РСУБД автоматически отпадают? )) Могу
C>ткнуть носом в SAP, в котором сложная модель с 10000 таблиц.
Может быть. С SAP не знаком. Хотя само по себе количество таблиц не всегда определяет меру сложности.
>> Простые запросы? Ты вообще когда-нибудь авиабилет покупал? Попробуй
>> рассказать, сколько мне будет стоить билет
>> Новосибирск-Франкфурт-Стамбул-Москва-Новосибирск. С учетом скидок и
>> ограничений.
C>Считаем маршрут от Новосибирска до Франкфурта (0 запросов — все станции
C>вполне можно хранить в памяти),
Сколько есть таких маршрутов?
C>затем считаем цену от Новосибирска до
C>границы (опять же — 0 запросов) и проверяем доступность (1-2 запроса)
C>свободных мест. Затем просим компанию, ответственную за перевозку от
C>границы до Франкфурта сделать тоже самое.
Нда. Похоже, ты никогда на самолете не летал. Открою тебе тайну — нет такой штуки, как "цена от Новосибирска до границы". Во-первых, авиакомпаний — море. Во-вторых, каждая авиакомпания на любой рейс предоставляет от одного до десяти тарифов (в реальности как правило их около пяти). При этом правила применимости тарифа могут включать в себя очень много всяких подробностей, которые я грубияну пересказывать не буду. Раз ты такой умный — сходи и посмотри сам. Вся тонкость в том, что эти правила определяет сама авиакомпания.
В третьих, цена билета Нск-Мск-Франкфурт-Мск-Нск вовсе не равна сумме цен билетов Нск-Мск-Нск и Мск-Франкфурт-Мск.

Тебе никогда не выписывали такой билет, что потом представитель авиакомпании говорил "извините, но в таком сочетании эти скидки не предоставляются"? Это из-за того, что бизнес-логика записана на английском языке, а не на языке программирования.
C>И я уж не говорю, что такие сложные заказы едва ли будут 1% от всех заказов.
Да-да. Для бухгалтера "почти никогда" == "не бывает". Для программиста "почти никогда" == "бывает".
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[16]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 08:04
Оценка:
Sinclair пишет:

> C>А что, если модель сложная, то РСУБД автоматически отпадают? )) Могу

> C>ткнуть носом в SAP, в котором сложная модель с 10000 таблиц.
> Может быть. С SAP не знаком. Хотя само по себе количество таблиц не
> всегда определяет меру сложности.

Там сама предметная модель сложная — управление крупным предприятием.

>>> Простые запросы? Ты вообще когда-нибудь авиабилет покупал? Попробуй

>>> рассказать, сколько мне будет стоить билет
>>> Новосибирск-Франкфурт-Стамбул-Москва-Новосибирск. С учетом скидок и
>>> ограничений.
> C>Считаем маршрут от Новосибирска до Франкфурта (0 запросов — все станции
> C>вполне можно хранить в памяти),
> Сколько есть таких маршрутов?

Вряд ли больше, чем роутеров в сети Интернет. А ведь маршрут для
IP-пакета на tier-1 роутерах рассчитывается почти мгновенно.

Пусть во всем мире 100000 аэропортов, тогда количество возможных
маршрутов между ними — 10^10, и это верхняя граница. Это вполне в
пределах даже домашнего компьютера.

> C>затем считаем цену от Новосибирска до

> C>границы (опять же — 0 запросов) и проверяем доступность (1-2 запроса)
> C>свободных мест. Затем просим компанию, ответственную за перевозку от
> C>границы до Франкфурта сделать тоже самое.
> Нда. Похоже, ты никогда на самолете не летал. Открою тебе тайну — нет
> такой штуки, как "цена от Новосибирска до границы".

Это я сглючил, не заметил слово "авиа" и подумал, что нужны ЖД-билеты. А
весело получается: авиабилет до границы

> Раз ты такой умный — сходи и посмотри сам. Вся тонкость в том, что эти

> правила определяет сама авиакомпания.
> В третьих, цена билета Нск-Мск-Франкфурт-Мск-Нск вовсе не равна сумме
> цен билетов Нск-Мск-Нск и Мск-Франкфурт-Мск.

Ну и что? Когда мы нашли подходящий маршрут, то никто не мешает
переадресовать оценочный запрос серверам конкретных компаний.

> C>И я уж не говорю, что такие сложные заказы едва ли будут 1% от всех

> заказов.
> Да-да. Для бухгалтера "почти никогда" == "не бывает". Для программиста
> "почти никогда" == "бывает".

Для программиста "почти никогда" == "можно не оптимизировать".

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[16]: Объектные базы как они есть
От: Alexey Rovdo Россия http://ru.linkedin.com/in/rovdo
Дата: 07.04.05 08:13
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Кхе, кхе. Может стоит посмотреть на RealLife(tm)? В мире Java сейчас

C>рулит Hibernate для OR-maping'а, JDO не прижился и не особо используется.


Hibernate и JDO отличаются не так уж сильно — идеи, стоящие за этим двумя технологиями, очень схожи (отличаются в основном исполнения). Ну а насчет популярности мне выводы делать сложно, но кажется, что какого-то значительного отрыва нет ни у JDO, ни у Hibenate. Во всяком случае "не прижился" — это вы уже загнули.
Re[13]: Объектные базы как они есть
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.04.05 08:15
Оценка:
Здравствуйте, Alexey Rovdo, Вы писали:
AR>Из личной практики работы с продуктами Versant я вынес следующее. Запросы нужно использовать при работе с ООСУБД как можно реже. Причин тут несколько.
Совершенно верное замечание.
AR>По моим личным впечатлениям декларативные языки запросов вообще не подходят для работы с ООСУБД — они не соответствуют объектной парадигме этих систем, вступая с ней в противоречие. Более понятным и продуктивным здесь может быть процедурный/функциональный подход к написанию запросов.
И с этим я тоже согласен.
Основная проблема произвольного декларативного языка запросов — взаимодействие с объектной моделью. Хорошо, когда все средства построения выражений-предикатов встроены прямо в язык. Когда в эту область вторгаются пользовательские типы и методы, происходит некоторая сложность. Хочется, чтобы язык запросов был вычислительно эквивалентен тому языку, который используется в определении поведения, т.е. кода методов.
AR>И, кстати, производители ООСУБД этот подход поддерживают, хотя пока и нельзя сказать, что он сильно развит (далее все гипотетически, конкретных продуктов, работающих подобным образом я не знаю). Т.е. вместо OQL запроса вида: "SELECT * From ObjectClass Where ObjectClass.atrrib = const_Object" мы в ОО-программе пишем что-то вроде "database.GetCollecttion('ObjectClass', constObject.equals)" и получаем результат-коллекцию. Обычно это коллекция ссылок на объекты.
В данный момент я пытаюсь научиться оптимизировать запросы, заданные прямо на языке-носителе в императивном стиле. Предикат описывается не как некоторое функциональное выражение, а прямо как метод на управляемом языке:
public static bool AcceptVisitor(Person visitor)
{
  return (visitor.Age > 21);
}

AR>Но уже и в этом примере видно, что включение объекта Object в результирующую коллекцию происходит в зависимости от того, какой результат возвратит метод cons_Object.equals(Object). Как оптимизировать такие запросы, если код метода equals может быть очень сложным?
Конвертировать императивный код в функциональное представление. Это можно сделать благодаря реверсируемости управляемого кода.
AR>Где отрабатывать код метода?
Ессно на сервере
AR>Чтобы создать систему, действительно способную оптимизировать такие запросы, разработчикам ООСУБД еще предстоит много и много потрудиться
Угу. Самое печальное, что заниматься этим совершенно некогда. За науку денег не платят — приходится упражняться урывками.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: Объектные базы как они есть
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.04.05 08:35
Оценка:
Здравствуйте, Cyberax, Вы писали:


C>Вряд ли больше, чем роутеров в сети Интернет. А ведь маршрут для

C>IP-пакета на tier-1 роутерах рассчитывается почти мгновенно.
Гм. Насколько мне известно, маршрутизация IP пакетов происходит независимо на каждом шаге. Нет никакого централизованного сервиса построения полного маршрута.
C>Пусть во всем мире 100000 аэропортов, тогда количество возможных
C>маршрутов между ними — 10^10, и это верхняя граница. Это вполне в
C>пределах даже домашнего компьютера.
C>Ну и что? Когда мы нашли подходящий маршрут, то никто не мешает
C>переадресовать оценочный запрос серверам конкретных компаний.
Ну вот "никто не мешает" почему-то не работает.
C>Для программиста "почти никогда" == "можно не оптимизировать".
Дело не в оптимизации. Пойми, что проблема не в низкой эффективности! Проблема в том, что такой системы, как ты рассказываешь, в природе не существует.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 08:46
Оценка:
Alexey Rovdo пишет:

> C>Кхе, кхе. Может стоит посмотреть на RealLife(tm)? В мире Java сейчас

> C>рулит Hibernate для OR-maping'а, JDO не прижился и не особо
> используется.
> Hibernate и JDO отличаются не так уж сильно — идеи, стоящие за этим
> двумя технологиями, очень схожи (отличаются в основном исполнения).

Идеи JDO 1.0 и Hibernate отличаются весьма сильно, JDO — это стандарт
для объектного persistance'а, а Hibernate — именно OR-maping. Поэтому
JDOQL имеет весьма узкую функциональность (Sun как обычно попыталась
сделать самый общий стандарт) по сравнению с HQL. Кроме того, в JDO1.1
не специфицирован сам формат OR-mapping'а. В JDO 2.0 исправлены многие
недостатки, но этот стандарт опоздал на год-два (политика, блин).

> Ну а насчет популярности мне выводы делать сложно, но кажется, что

> какого-то значительного отрыва нет ни у JDO, ни у Hibenate. Во всяком
> случае "не прижился" — это вы уже загнули.

Отрыв сейчас как раз заметен становится.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[14]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 08:47
Оценка:
Sinclair пишет:

> В данный момент я пытаюсь научиться оптимизировать запросы, заданные

> прямо на языке-носителе в императивном стиле. Предикат описывается не
> как некоторое функциональное выражение, а прямо как метод на
> управляемом языке:
>
>public static bool AcceptVisitor(Person visitor)
>{
> return (visitor.Age > 21);
>}
>
>
А сколько времени будет работать такой запрос, если в базе 10000000
человек?

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[15]: Объектные базы как они есть
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 07.04.05 08:50
Оценка:
Cyberax пишет:
>>public static bool AcceptVisitor(Person visitor)
>>{
>> return (visitor.Age > 21);
>>}
>>
>>
> А сколько времени будет работать такой запрос, если в базе 10000000
> человек?

В GLORP используется такой подход — вместо реального объекта в
блок-фильтр подсовывается специальный объект который накапливает все
посылаемые ему сообщения. Из этой информации затем и генерируется запрос
к серверу.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[18]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 08:51
Оценка:
Sinclair пишет:

> C>Вряд ли больше, чем роутеров в сети Интернет. А ведь маршрут для

> C>IP-пакета на tier-1 роутерах рассчитывается почти мгновенно.
> Гм. Насколько мне известно, маршрутизация IP пакетов происходит
> независимо на каждом шаге. Нет никакого централизованного сервиса
> построения полного маршрута.

Маршрутизация в IP — смешанная. Пакеты идут hop-by-hop маршрутизацией,
но маршруты на каждом хосте рассчитываются со знанием всей топологии сети.

> C>Пусть во всем мире 100000 аэропортов, тогда количество возможных

> C>маршрутов между ними — 10^10, и это верхняя граница. Это вполне в
> C>пределах даже домашнего компьютера.
> C>Ну и что? Когда мы нашли подходящий маршрут, то никто не мешает
> C>переадресовать оценочный запрос серверам конкретных компаний.
> Ну вот "никто не мешает" почему-то не работает.

Работает. http://www.aviatrans.ru/index.html например.

> C>Для программиста "почти никогда" == "можно не оптимизировать".

> Дело не в оптимизации. Пойми, что проблема не в низкой эффективности!
> Проблема в том, что такой системы, как ты рассказываешь, в природе не
> существует.

Почему нет, когда я своими глазами ее в Канаде ее видел? И главное, я не
знаю причин (даже организационного характера), по которым она невозможна.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[16]: Объектные базы как они есть
От: _vovin http://www.pragmatic-architect.com
Дата: 07.04.05 08:57
Оценка:
Andrei N.Sobchuck wrote:
> Cyberax пишет:
>
>>>public static bool AcceptVisitor(Person visitor)
>>>{
>>> return (visitor.Age > 21);
>>>}
>>>
>>>
>>
>>А сколько времени будет работать такой запрос, если в базе 10000000
>>человек?
>
>
> В GLORP используется такой подход — вместо реального объекта в
> блок-фильтр подсовывается специальный объект который накапливает все
> посылаемые ему сообщения. Из этой информации затем и генерируется запрос
> к серверу.
>

Можно построить запрос на основе декомпиляции байт-кода, так сделано в
ReStore. Это покрывает большее количество случаев.
Posted via RSDN NNTP Server 1.9
Re[16]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 09:17
Оценка:
Andrei N.Sobchuck пишет:

>> А сколько времени будет работать такой запрос, если в базе 10000000

>> человек?
> В GLORP используется такой подход — вместо реального объекта в
> блок-фильтр подсовывается специальный объект который накапливает все
> посылаемые ему сообщения. Из этой информации затем и генерируется запрос
> к серверу.

И что? Каким образом фильтр поймет, что нужно выполнить выборку по всем
людям с возрастом больше 27 лет?

Сложность все равно O(n) останется, тогда как в RDB в таблице с индексом
по возрасту этот запрос займет O(log n) времени.

Конечно, можно взять в ООБД отсортированную по возрасту коллекцию людей,
и потом уже по ней выполнить поиск, но такой подход будет изморфен RDBшному.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[17]: Объектные базы как они есть
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.04.05 09:18
Оценка:
Здравствуйте, _vovin, Вы писали:
_>Можно построить запрос на основе декомпиляции байт-кода, так сделано в
_>ReStore. Это покрывает большее количество случаев.
Можно ссылочку на ReStore?
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: Объектные базы как они есть
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.04.05 09:18
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>А сколько времени будет работать такой запрос, если в базе 10000000
C>человек?
Все зависит от того, как реализованы геттеры свойства Age в потомках класса Person В нормальном случае ~ ln(1000000).
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 09:19
Оценка:
_vovin пишет:

>> В GLORP используется такой подход — вместо реального объекта в

>> блок-фильтр подсовывается специальный объект который накапливает все
>> посылаемые ему сообщения. Из этой информации затем и генерируется запрос
>> к серверу.
>>
> Можно построить запрос на основе декомпиляции байт-кода, так сделано в
> ReStore. Это покрывает большее количество случаев.

Это покрывает только тривиальные случаи типа "age>23 and height>180".
Как декомпилировать и осмыслить сложный запрос с join'ами (которые в ИЯ
превратятся в циклы) — мне непонятно.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[18]: Объектные базы как они есть
От: _vovin http://www.pragmatic-architect.com
Дата: 07.04.05 09:24
Оценка:
Cyberax wrote:

> _vovin пишет:

>
>
>>>В GLORP используется такой подход — вместо реального объекта в
>>>блок-фильтр подсовывается специальный объект который накапливает все
>>>посылаемые ему сообщения. Из этой информации затем и генерируется запрос
>>>к серверу.
>>>
>>
>>Можно построить запрос на основе декомпиляции байт-кода, так сделано в
>>ReStore. Это покрывает большее количество случаев.
>
>
> Это покрывает только тривиальные случаи типа "age>23 and height>180".
> Как декомпилировать и осмыслить сложный запрос с join'ами (которые в ИЯ
> превратятся в циклы) — мне непонятно.
>

Даже упомянутый случай с GLORP-ом отлично решает эту проблему.
Построенное синтаксическое дерево исходного языка (некоторого
подмножества) отображается на SQL и дальше выполняется обычный запрос.
Это уже пройденный этап. А главная проблема связана с полиморфизмом.
Posted via RSDN NNTP Server 1.9
Re[18]: Объектные базы как они есть
От: _vovin http://www.pragmatic-architect.com
Дата: 07.04.05 09:25
Оценка:
Sinclair wrote:

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

> _>Можно построить запрос на основе декомпиляции байт-кода, так сделано в
> _>ReStore. Это покрывает большее количество случаев.
> Можно ссылочку на ReStore?

http://www.solutionsoft.co.uk/restore/index.htm
Posted via RSDN NNTP Server 1.9
Re[17]: Объектные базы как они есть
От: GlebZ Россия  
Дата: 07.04.05 09:32
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Сложность все равно O(n) останется, тогда как в RDB в таблице с индексом

C>по возрасту этот запрос займет O(log n) времени.
А кто в ООБД отменил индексы?

C>Конечно, можно взять в ООБД отсортированную по возрасту коллекцию людей,

C>и потом уже по ней выполнить поиск, но такой подход будет изморфен RDBшному.
И что в этом плохого? К тому же — индекс можно строить независимо от вида коллекции.



С уважением, Gleb.
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[16]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 10:08
Оценка:
Sinclair пишет:

> From: *Sinclair* </Users/Profile.aspx?uid=5743> rsdn

> </search/?group=27> </Users/Private/AddFav.aspx?mid=1111513>
> <NewMsg.aspx?gid=27> <NewMsg.aspx?mid=1111513> <?mid=1111513>
> <Message.aspx?mid=1111513#1111513> <NewMsg.aspx?mid=1111513&edit=1>
> <Private/Self.aspx?mid=1111513>
>
> Здравствуйте, Cyberax, Вы писали:
> C>А сколько времени будет работать такой запрос, если в базе 10000000
> C>человек?
> Все зависит от того, как реализованы геттеры свойства Age в потомках
> класса Person В нормальном случае ~ ln(1000000).

Причем тут getter'ы? Пусть алгоритм поиска выглядит так:
Schools schools=getAllSchools();
for(int x=0;x<coll.size();x++)
{
    Human h=coll.get(x);
    if (h.getAge()>27)
    {
       for (int y=0;y<schools.size();y++)
          if (schools.get(x).getStudents().hasObject(h))
           resultColl.add(h);
    }
}

Для случая RDB такой алгоритм будет работать O(n) без индексов и O(log
n) с индексами.

Если его соптимизировать в его ОО-воплощении, то получится опять тот же
реляционный алгоритм.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[18]: Объектные базы как они есть
От: Cyberax Марс  
Дата: 07.04.05 10:09
Оценка:
GlebZ пишет:

> C>Сложность все равно O(n) останется, тогда как в RDB в таблице с

> индексом
> C>по возрасту этот запрос займет O(log n) времени.
> А кто в ООБД отменил индексы?

Никто.

> C>Конечно, можно взять в ООБД отсортированную по возрасту коллекцию

> людей,
> C>и потом уже по ней выполнить поиск, но такой подход будет изморфен
> RDBшному.
> И что в этом плохого? К тому же — индекс можно строить независимо от
> вида коллекции.

Тогда непонятно ЧЕМ же OODB отличается от RDB.

Единственное отличие: в OODB идентификатором объекта является OID, в
котором возможно закодировать физическое расположение объекта на диске,
а в RDB идетификтором строки является логический PK. Но это уже слишком
незначительная деталь.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.