LINUX.ORG.RU
решено ФорумTalks

[жж][офтопик] Жена и базы данных

 ,


0

1

Всем привет! В общем моя жена пошла на курсы по разработке баз данных. На этих курсах они будут работать c Microsoft SQL Server 2008. Дома ей его тоже нужно установить. На курсах везде стоит офтопик, но SQL всё равно крутится в виртуальной машине. Я в потерях в связи с этим -дома на компе у жены и линь и офтопик. Вопрос - почему на курсах его именно с виртуалки пускают?

★★

Может они делают снапшот, и после окончания темы тупо востанавливают все изменения ?

deterok ★★★★★
()

Вендузятники настолько суровы, что создают виртуальную машину для каждой установленной программы

xorik ★★★★★
()

> Вопрос - почему на курсах его именно с виртуалки пускают?

эээ, потому что ты ставишь его на 1 компьютер 1 раз, а потом клонируешь N раз на все компьютеры силой копипаста?

а в случае если пользователь ушатает систему, можно «выдать ему новый компьютер» за считаные секунды. Особенно если виртуалочка по сети грузится.

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

имхо, учебные линуксы тоже лучше пускать на виртуалочках

а девелоперскую венду нужно разворачивать долго и мучительно. Например, поставил на установку MSVS+MSDN и пошел обедать, пить чай и еще что-нибудь =)

stevejobs ★★★★☆
()

1. Так проще восстанавливать убитую-искалеченную учеником базу.

2. Так проще заблокировать нелицензионной копии СУБД проверку на microsoft.com :)

question4 ★★★★★
()

Понял, спасибо за ответы. Т.е. в Виртуалку я закидываю обычную XP, довожу её до требований SQL сервера и потом делаю снапшоты всей системы по мере необходимости?

Napitok ★★
() автор топика
Ответ на: комментарий от question4

Бесплатно же.

2. Так проще заблокировать нелицензионной копии СУБД проверку на microsoft.com :)

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

Camel ★★★★★
()
Ответ на: комментарий от stevejobs

>поставил на установку MSVS+MSDN и пошел обедать, пить чай и еще что-нибудь =)
А потом вернулся и увидел, что на 20% оно выдало какое-нибудь тупое окошко и ждёт, пока ты нажмёшь ОК.

Ramen ★★★★
()
Ответ на: комментарий от Ramen

>А потом вернулся и увидел, что на 20% оно выдало какое-нибудь тупое окошко и ждёт, пока ты нажмёшь ОК.

Как в провосланом дебиане же!

Windos7
()
Ответ на: комментарий от Windos7

Gentoo вперде.

Как в провосланом дебиане же!

В Gentoo такого нет. Там просто emerge с ошибкой вываливается :-]

Camel ★★★★★
()

Потму что у них там нелегальщина - потому и с виртуалки. Рекомендую доложить в ОБЭП )

Siado ★★★★★
()

Napitok> На этих курсах они будут работать c Microsoft SQL Server 2008. Дома ей его тоже нужно установить. На курсах везде стоит офтопик, но SQL всё равно крутится в виртуальной машине.

Дома ей эту дрянь ставить не нужно. Если она пошла на курсы по разработке баз данных, а не на курсы MSSQL, то ей достаточно будет MySQL.

Napitok> Вопрос - почему на курсах его именно с виртуалки пускают?

Потому, что вендосервер - это криво и ненадёжно. В любой момент может упасть (зато начальство видит, что админ нужен и без него всё внезапно может обрушиться, да - за эту имитацию деятельности вендоадмины венду и любят). Посему виртуальная машина - самый удобный способ (в случае чего можно быстро восстановить).

Quasar ★★★★★
()
Ответ на: комментарий от Quasar

> Если она пошла на курсы по разработке баз данных, а не на курсы MSSQL, то ей достаточно будет MySQL.

а если ее научили писать MSSQL-специфичный код, то это конечно же уже не курсы по разработке баз данных =)

олсо, куча книг написана конкретно про MSSQL, в т.ч. и винрарных. Олсо, этот ваш mysql даже секвенции не умеет, а транзакции умеет так что лучше б уж не умел.

stevejobs ★★★★☆
()
Ответ на: комментарий от Windos7

>Как в провосланом дебиане же!

4.2 же.
Вчера ставил эту вижлстудию в виртуалку - это просто ппц какой-то. Окошко выскакивало три раза и винда перезагружалась после нажатия кнопки... Компьютерный век, автоматизация...

Dimanc ★★
()
Ответ на: Gentoo вперде. от Camel

В Gentoo такого нет. Там просто emerge с ошибкой вываливается

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

sign
()
Ответ на: Gentoo вперде. от Camel

>В Gentoo такого нет. Там просто emerge с ошибкой вываливается :-]

В генте ты не отходишь от компа пока не установишь )

Siado ★★★★★
()
Ответ на: комментарий от stevejobs

mysql даже секвенции не умеет

После, того как я увидел молчаливое обрезание данных в MySQL при выполнении оператора update, я к нему просто не притрагиваюсь.

А вообще идеальных баз не бывает. Mssql тоже не умеет секвенции. А еще Mssql не умеет running total без курсоров. А еще он все делает через tempdb.

Да и с транзакциями в MSSQL придется выбирать в момент создания базы - или чистый блокировочник (share lock на чистое чтение), или MVCC. Причем при включении MVCC основные таблицы раздуваются (14 байт в каждую обновленную запись + page split при переполнении страниц) и снапшоты записей пишутся в tempdb.

Когда MSSQL работает в режиме чистого блокировочика - то все блокировки хранятся в оперативной памяти. Блокировка накладывается на хэш ключа индекса (6 байт), поэтому возможны дедлоки при колизиях хэша (уже при 2-3 миллионах записей). При блокировании более 5000 записей в одной таблице MSSQL может делать апгрейд блокировки на всю таблицу - тоже можно получить дедлок.

MSSQL оценивает планы выполнения запросов по стоимости - поэтому планы получаются очень чувствительны к статистикам. Если в распределении исходных данных имеются перекосы, то можно получить чудовищно неэффективный план, когда вместо hash-join будет делать nested-looped.

sign
()
Ответ на: комментарий от Quasar

> Дома ей эту дрянь ставить не нужно. Если она пошла на курсы по разработке баз данных, а не на курсы MSSQL, то ей достаточно будет MySQL.

Лучше постгрес. Нету ничего хуже, чем человек с MySQL-ными привычками, полезший в нормальную БД.

shimon ★★★★★
()
Ответ на: комментарий от sign

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

Интересно, можно поподробнее с этого момента?

А еще Mssql не умеет running total без курсоров.


Через джойн на самого себя и/или подзапросы это все равно печально, разве нет?

shimon ★★★★★
()
Ответ на: комментарий от sign

фигасе сколько в нем дряни ;) надо будет твой расстрельный список сохранить куда-нибудь... на всякий случай

stevejobs ★★★★☆
()

А нельзя было на другие курсы записаться, которые бы не находились в противоречии с моральными устоями линуксоидов?

Smacker ★★★★★
()
Ответ на: комментарий от Quasar

Там скорее именно курсы MSSQL, просто называются так. Там контора проводит курсы ещё по C# и тестерские.

Napitok ★★
() автор топика
Ответ на: комментарий от shimon

После, того как я увидел молчаливое обрезание данных в MySQL при выполнении оператора update, я к нему просто не притрагиваюсь.

Интересно, можно поподробнее с этого момента?

mysql> create table test (tf decimal(3)) engine = innodb;
mysql> insert into test values (1000);
mysql> select * from test;
+------+
| tf   |
+------+
|  999 |
+------+

Для меня такое поведение базы данных неприемлемо. Я предпочитаю получить ошибку в лог и исправлять программу или структуру БД.

А еще Mssql не умеет running total без курсоров.

Через джойн на самого себя и/или подзапросы это все равно печально, разве нет?

По моему мнению, через джойн и подзапросы в Mssql все будет намного печальнее, чем через курсоры, так как сложность выполнения запроса будет n^2. Вот и приходится использовать для running total курсоры.

sign
()
Ответ на: комментарий от stevejobs

фигасе сколько в нем дряни ;) надо будет твой расстрельный список сохранить куда-нибудь... на всякий случай

У меня там по тексту несколько неточностей имеется.

Mssql всегда хранит блокировки в оперативной памяти.

Просто когда он работает в режиме блокировочника он накладывает shared lock блокировки при чистом чтении. Соответственно другие транзакции, которые будут пытаться обновить такие чисто прочитанные записи, будут ждать пока все shared lock блокировки не будут сняты.

В случае же включения MVCC можно обновлять записи, прочитанные чисто другими транзакциями, но придется за это платить тем, что старые версии записей будут записываться в tempdb.

По моему мнению - это один из самых важных параметров который надо учитывать при создании базы в MSSQL, так как он влияет на проектирование структуры БД и написание запросов.

sign
()
Ответ на: комментарий от sign

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

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

Хорошо, что при слове «бабло» у меня сразу decimal (15,4) на автомате ставится.

shimon ★★★★★
()
Ответ на: комментарий от sign

Кстати да, а ты какую СУБД используешь? Постгрес или есть еще что-то из свободного, что можно рекомендовать, не опасаясь удара по морде?

shimon ★★★★★
()
Ответ на: комментарий от stevejobs

> Олсо, этот ваш mysql даже секвенции не умеет, а транзакции умеет так что лучше б уж не умел.

В чем конкретно проблема с мускульными транзакциями?

gods-little-toy ★★★
()
Ответ на: комментарий от sign

> MSSQL оценивает планы выполнения запросов по стоимости - поэтому планы получаются очень чувствительны к статистикам. Если в распределении исходных данных имеются перекосы, то можно получить чудовищно неэффективный план, когда вместо hash-join будет делать nested-looped.

А что, в каких-то современных СУБД оно по-другому?

gods-little-toy ★★★
()
Ответ на: комментарий от sign

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

ну дык поставь в my.cnf строчку sql_mode='traditional' и будет все как у других,

ERROR 1264 (22003): Out of range value for column 'tf' at row 1

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

ну дык поставь в my.cnf строчку sql_mode='traditional' и будет все как у других,

Спасибо, буду знать. В моем случае, это была не единственная причина, по которой я не стал использовать MySQL.

Вторая причина была в том, что она падала с segmentation fault на некоторых запросах (дело было под windows, а версия 5.XX) - не было времени разбираться что, да как. Проще было поставить postgresql, к тому времени уже был нативный порт под windows.

Третья причина (и может быть самая главная) была в том, что не было вменяемой лицензии на распространение MySQL чистый GPL на саму базу + чистый GPL на библиотеки - с ней нельзя было стыковать коммерческий продукт и был явный запрет на установку на компьютеры, поставляемые клиентам. Требовалась покупка какой-то коммерческой лицензии.

sign
()
Ответ на: комментарий от shimon

Кстати да, а ты какую СУБД используешь? Постгрес или есть еще что-то из свободного, что можно рекомендовать, не опасаясь удара по морде?

От задач зависит. Я свое время использовал postgresql и она мне понравилась. У него идеология MVCC очень похожа на реализацию MVCC у oracle.

Нашел еще интересный обзор баз данных Freebyte's Guide to... Free Databases - там перечислены все основные базы под linux.

sign
()
Ответ на: комментарий от gods-little-toy

MSSQL оценивает планы выполнения запросов по стоимости

А что, в каких-то современных СУБД оно по-другому?

Ну вообще-то, есть еще rule-based optimizers. The Oracle SQL Optimizers

Потом - возможно можно было бы оценивать лучше, чтобы планы были более стабильны и, по возможности, избегали операций вида nested loops -> scan.

А то что получается - статистика сообщила: «будет одна запись».

Планировщик построил план: «Выбираем нужную запись и для каждой записи делаем полное сканирование подчиненной таблицы». В результате, если вместо одной родительской записи получили миллион, то база данных такой запрос может выполнять несколько часов. Хотя hash join в этом случае потребовал бы просмотра каждой таблицы по одному разу и выполнился бы за вполне разумное время.

sign
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.