Автор Тема: web семенары  (Прочитано 246628 раз)

alexus

  • Гость
Re: web семенары
« Ответ #645 : Январь 05, 2013, 09:32:34 pm »
Один вопрос... посмотрел по ссылкам... но ответа не нашёл... А как у Седны с изолированностью транзакций?
Вроде бы ACID они поддерживают в полной мере.
Хм... ничего я не понял... Смотрим
Цитировать
1.2.4 Transactions Management

An application can execute queries and updates against the specified database only in the scope of a transaction. That is, once a session has been opened, an application can begin a transaction, execute statements and commit this transaction. In a session transactions are processed sequentially. That is, application must commit an ongoing transaction before beginning a new one.
(подчёркнуто мной)
"Я один это вижу?" (с)...

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: web семенары
« Ответ #646 : Январь 05, 2013, 09:35:12 pm »
В рамках одной сессии (одного подключения к БД) транзакции выполняются последовательно, не вложенно.

Но сессий-то может быть много.

Под application они понимают в виду код, открывший одну конкретную сессию.

alexus

  • Гость
Re: web семенары
« Ответ #647 : Январь 05, 2013, 09:41:15 pm »
В рамках одной сессии (одного подключения к БД) транзакции выполняются последовательно, не вложенно.

Но сессий-то может быть много.

Под application они понимают в виду код, открывший одну конкретную сессию.
Угу... Вот нашёл, наконец...
Цитировать
2. General principles ACID transactions Atomicity – rollback procedure Consistency – by design Isolation – S2PL and snapshots Durability – two-level recovery scheme Versioning environment Support for Read-Only transactions Physical recovery using persistent snapshot Logical recovery using log of microoperations
3. Versioning Scheme Page-level versioning Consistent with internal representation (e.g. following the pointers) Transaction-transparent solution All logic is encapsulated in a separate module on SM Limited number of versions for each page More effective maintenance and garbage collecting ( 4 versions on 2 snapshots ) Support for snapshots to process read-only transactions No isolation is required Long-running read-only transactions cannot be rolled back due to the lack of versions
4. 
5. 
6. 
7. 
8. 
9. Rollback and Recovery scheme Normal processing: Logical logging of all microoperations (1 record per microoperation + 1 record per changed persistent version) Transaction-consistent snapshots on checkpoints Rollback processing: Undo microoperations using logical log records Two-level recovery process: Restore transaction-consistent state using persistent snapshot Redo the necessary microoperations using logical log
10. Recovery process
11. Isolation Usual transactions S2PL protocol Document-level granularity Read-only transactions No isolation is required since they use transaction-consistent snapshots
12. Thank you for your attention!
(выделено мной)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: web семенары
« Ответ #648 : Январь 06, 2013, 05:32:02 am »
Я вот тоже не понимаю каким образом можно что то противопоставить реляционной алгебре.
Математике противопоставляют технологию. Дожили...

А Вы, Борис, откройте в этой книжке Главу 5 "Формальная семантика".
Там такая математика, в духе операциональных семантик и проч. :)

Ок. Посмотрю и выскажу потом свою имху.  :)

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: web семенары
« Ответ #649 : Январь 06, 2013, 07:45:16 am »
Я, наверное, стормозил, когда привёл свой ФОК, но не показал примеров запросов.

Вот примерчик - пусть у меня есть карточки товаров следующего вида:
<карточка_детали>
    <аэродинамика>
        <спойлер>
            <для_переднего_бампера/>
        </спойлер>
        <комплектация_сеткой/>
    </аэродинамика>
    <геом>
        <ширина decimal="10.5"/><высота decimal="5.6"/>
    </геом>
</карточка_детали>

И я хочу отобрать из всех деталей спойлеры для переднего бампера, укомплектованные сеткой, с определёнными ограничениями на размеры (< и > записаны как le и ge).

Вот запрос:
for $det in collection("details")
    let $w as xs:decimal := xs:decimal($det/геом/ширина/@decimal), $h as xs:decimal := xs:decimal($det/геом/высота/@decimal),
    where exists($det/аэродинамика/спойлер/для_переднего_бампера) and exists($det/аэродинамика/спойлер/комплектация_сеткой) and ($w le 11) and ($h le 6)
return $det

Как это выплняется? Например, "Седна" не имеет априорной схемы данных, она поддерживает дескриптивную ("де-факто") схему. Т.е. у неё есть схема данных - это дерево всех-всех узлов, которые вообще есть в данных.
Если хотите, автоматически поддерживаемый "справочник".
Сам узел данных, таким образом, содержит не имена тегов, всего лишь id узлов из дескриптивной схемы - ну и содержание атрибутов тегов (="значение").

У каждого узла дескриптивной схемы есть списки обратных ссылок на соответствующие узлы данных.
Т.е. при выполнении моего запроса будут найдены узлы в схеме ../для_переднего_бампера, ../комплектация_сеткой, затем выполнено объединение их списков ссылок - ну и уже отбор по значению атрибутов. А ведь мы ещё даже не задействовали механизм индексов - только лишь схему данных...

Давайте посмотрим, как всё это будет выглядеть на SQL? :)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: web семенары
« Ответ #650 : Январь 06, 2013, 08:06:19 am »
Нет времени делать точно как у вас. Но вот примерно похожее на 1с-ном диалекте SQL:
Цитировать
ВЫБРАТЬ
   Номенклатура.Ссылка
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.ВидНоменклатуры.ТипНоменклатуры = &ТипНоменклатуры

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: web семенары
« Ответ #651 : Январь 06, 2013, 08:36:21 am »
Вечером накидаю базу под вашу задачу и сделаю несколько примеров запросов. Может даже видео сниму как это делается, чтобы стало понятно на сколько это просто с SQL

alexus

  • Гость
Re: web семенары
« Ответ #652 : Январь 06, 2013, 08:40:48 am »
Вечером накидаю базу под вашу задачу и сделаю несколько примеров запросов. Может даже видео сниму как это делается, чтобы стало понятно на сколько это просто с SQL
Я уже начал это делать... но больно скучно... бросил.

2 И.Е. Ермакову... запрос на SQL выглядит более просто (и более читабельно)... если моего слова мало, то нарисую БД и запрос к ней...
А вот использовать СУБД для Ваших задач, в которой нет изолированности транзакций - это садо-мазо... :)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: web семенары
« Ответ #653 : Январь 06, 2013, 09:13:26 am »
(< и > записаны как le и ge).
Вы вероятно имели в виду lt и gt? Логично, что бы под le и ge шифровались <= и >=...
Эх, фортран-стайл...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: web семенары
« Ответ #654 : Январь 06, 2013, 10:19:03 am »

Вот запрос:
for $det in collection("details")
    let $w as xs:decimal := xs:decimal($det/геом/ширина/@decimal), $h as xs:decimal := xs:decimal($det/геом/высота/@decimal),
    where exists($det/аэродинамика/спойлер/для_переднего_бампера) and exists($det/аэродинамика/спойлер/комплектация_сеткой) and ($w le 11) and ($h le 6)
return $det


А exists предполагает, что соответствующих узлов может не быть? Или что это за проверка?

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: web семенары
« Ответ #655 : Январь 06, 2013, 10:26:31 am »
Мне тоже, как привыкшему работать с запросами 1С причем с отличным конструктором оных, гораздо проще написать скль запрос. А подобный запрос без какого нить конструктора реально сложно написать (что не скажешь об скль, хотя там тоже конечно бываеют выверты, но даже представить не могу подобные выверты в предложенной модели, вообще наверно мозги сплавятся). Какие нибудь запросы посложнее можете продемонстрировать?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: web семенары
« Ответ #656 : Январь 06, 2013, 03:13:55 pm »
Вставлю свои 5 копеек: то что NoSQL быстрее чем SQL-DBMS это миф. Подавляющее большенство NoSQL баз данных как минимум не быстрее, точнее не всегда быстрее. Единственное что NoSQL может быть лучше масштабируема нежели SQL-DBMS, но, опять таки, это не есть правило, так может быть, но так есть не всегда. Каждый год на Application Developers Days это дело обсуждается, и выводы именно вот такие.

По поводу производительности именно Седны: http://gridsafe.sourceforge.net/docs/database-benchmark-report.pdf
На указанных тестах Седна всего то в 50 раз медленнее чем MySQL :-)

И да, мне, как не знающему SQL, и вообще с db не работающему, конечно же много ближе подход даже не NoSQL, а NoDBMS :-) Но это не значит что такой подход прокатит везде, и что его нужно куда-то продвигать.

PS. И это все при том, что SQL-DBMS они все же не про производительность, а про гибкость и удобство. Понятно что без DBMS можно на порядок производительность поднять. А избавившись от абстракций, можно еще на порядок. Правда как только потребуется решение масштабировать например, придется думать и миграция займет не предсказуемое время (то есть в планах четкий срок не записать).
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: web семенары
« Ответ #657 : Январь 06, 2013, 04:53:09 pm »
Из чистого любопытства попробовал сделать это в MS Access 2010.
Пришлось поковыряться в интерфейсе, покурить синтаксис и разобраться как пользоваться конструкторами.
Впечатления ужасные. Люди, даже не пытайтесь использовать эту хрень.
Тем не менее вроде работает.
Схема данных такая: http://hostingkartinok.com/show-image.php?id=ac68b57869dba264a0437b51300abbee

Реализованы динамические характеристики.
Поддерживаемые типы характеристик:
1. Булево
2. Число
3. Строка
4. Ссылка (для перечислимых значений)

Перечислимые значения характеристик хранятся в таблице "МножестваЗначенийХарактеристик".

Следующий запрос выгребает все запчасти, характеристики к ним и значения этих характеристик.
Цитировать
SELECT
    Выборка.Запчасть,
    Выборка.Характеристика,
    IIf(IsNull(МножестваЗначенийХарактеристик.Значение),
        Выборка.Значение,
        МножестваЗначенийХарактеристик.Значение) AS ЗначениеХарактеристики
FROM
    МножестваЗначенийХарактеристик
        RIGHT JOIN (SELECT
                        Запчасти.Наименование AS Запчасть,
                        Характеристики.Наименование AS Характеристика,
                        Choose(Характеристики.Тип,
                            ЗначениеБулево,
                            ЗначениеЧисло,
                            ЗначениеСтрока,
                            ЗначениеСсылка) AS Значение,
                        Характеристики.Код AS КодХарактеристики
                    FROM Характеристики
                        RIGHT JOIN (Запчасти RIGHT JOIN ЗначенияХарактеристик
                                             ON Запчасти.Код = ЗначенияХарактеристик.Запчасть)
                        ON Характеристики.Код = ЗначенияХарактеристик.Характеристика) AS Выборка
        ON (МножестваЗначенийХарактеристик.Код = CLng(Выборка.Значение))
            AND (МножестваЗначенийХарактеристик.Характеристика = Выборка.КодХарактеристики);

ЗапчастьХарактеристикаЗначениеХарактеристики
СпойлерШирина10
СпойлерВысота20
СпойлерЦветКрасный

ps Ну а теперь можно расслабиться в няшной 1с-ке  ;D

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: web семенары
« Ответ #658 : Январь 06, 2013, 05:35:29 pm »
А это:
for $det in collection("details")
    let $w as xs:decimal := xs:decimal($det/геом/ширина/@decimal), $h as xs:decimal := xs:decimal($det/геом/высота/@decimal),
    where exists($det/аэродинамика/спойлер/для_переднего_бампера) and exists($det/аэродинамика/спойлер/комплектация_сеткой) and ($w le 11) and ($h le 6)
return $det

примерно так будет:
Цитировать
SELECT Запчасть
FROM ЗначенияХарактеристик
WHERE (Характеристика = Ширина AND ЗначениеЧисло >5)
OR (Характеристика = Высота AND ЗначениеЧисло >10);

Что такое "для_переднего_бампера" и "комплектация_сеткой" я не понял.
Это группы запчастей? Или свойства запчастей? Или свойства групп?

alexus

  • Гость
Re: web семенары
« Ответ #659 : Январь 06, 2013, 07:40:52 pm »
Вставлю свои 5 копеек: то что NoSQL быстрее чем SQL-DBMS это миф.
Алексей, проблема несколько иначе формулируется... Сравнивать надо равные продукты в одинаковых условиях... Если СУБД не поддерживает изолированность транзакций, то её нельзя сравнивать с теми СУБД, которые изолированность поддерживают. Было время, когда MySQL "рвал промышленные СУБД, как Тузик грелку"... но когда в него ввели понятие транзакции... победные реляции закончились.
Опять же, в своё время, были стандартные тесты для сравнения производительности СУБД... в равных условиях (пока производители СУБД не начали затачивать свои продукты под эти тесты)...
Собственно, пока Седна не станет нормально поддерживать транзакций её можно сравнивать только с самой собой (в предыдущих версиях, например)... поскольку однопользовательская СУБД - нонсенс...
Меня смутило другое... что сначала реализуют "СУБД", а потом к ней добавляют поддержку транзакций... но, "соль" в том, что СУБД должна начинаться с механизма разделения транзакций. Делать изолированность... апосля... означает полное переписывание всей "СУБД". То, что связано с хранением, поиском, извлечением, передачей и изменением информации - вторично, зависимо от параллельности исполнения. Собственно, опыт разработчиков MySQL хороший пример тому.