|
|
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
Хм, на Java очень богатая библиотека примитивов синхронизации, в том числе атомарные операции, неблокирующие очереди и прочие радости современной науки :) Стоит их внимательно изучить перед реализацией, там много уже готового. Теоретически, для курсовой работы, Java - вполне себе язык для разработки БД. Тем более что БД на Java вполне себе есть, даже opensource :) Проблемы будут со сборкой мусора под нагрузкой, но и они решаемые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 00:23 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
DPH3Хм, на Java очень богатая библиотека примитивов синхронизации, в том числе атомарные операции, неблокирующие очереди и прочие радости современной науки :) Стоит их внимательно изучить перед реализацией, там много уже готового. Теоретически, для курсовой работы, Java - вполне себе язык для разработки БД. Тем более что БД на Java вполне себе есть, даже opensource :) Проблемы будут со сборкой мусора под нагрузкой, но и они решаемые. Поверю на слово, скорее всего так и есть: там бы это всё выглядело более строго) Но всё-таки java - не технология для написания БЫСТРОЙ Субд. Компилируемые C/C++ в любом случае быстрее. А мне ведь ещё надо было адекватно сравнить с MySql и прочими) ЗЫ А атомарные операции поддерживаются на уровне процессора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 00:32 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
SoFx00 один поток начинает читать индекс, второй тоже хочет читать. Если тупо блокировать работу с индексом - огромное падение производительности, т.к. второй поток вынужден ждать окончания чтения, вместо выполнения параллельно. Поэтому надо вводить 3 состояния - чтение, запись, не_используется и на их основе строить логику новой спинблокировки. Э-э-э... Т.е. ты не читал Рихтера? Там целая глава посвящена именно разводу читателей и писателей. Двумя мутексами. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 00:40 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
авторЭ-э-э... Т.е. ты не читал Рихтера? Там целая глава посвящена именно разводу читателей и писателей. Двумя мутексами. Читал. Но такого если честно не помню. В любом случае задача решена лично мною, без подсказок, причём решение в итоге вышло достаточно изящное... Хотя обидно будет, если убил время на изобретение велосипеда) Ну и к слову, мьютексы использовать для синхронизации внутри одного процесса - плохо. Переключение в режим ядра занимает много процессорного времени) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 00:51 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
авторИз тех вопросов которые он задает 3 качественных курсовых можно сделать. И на диплом и даже на дисерт хватит при должном подходе. ТОЧНО:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 08:27 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
smansdb пишет: > На Java синхронизация многопоточности выполняется элементарно… Это гон. Она везде одинаково сложна. Не сама синхронизация (она везде проста), а проектирование приложения таким образом, чтобы правильно делать синхронизацию. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 11:01 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
SoFx00 пишет: > Java - это не язык для написания быстрой СУБД. Я плохо знаком с явой, но > вряд ли средства синхронизации в ней сильно отличаются от имеющихся на > Win32 и алгоритмических: те же критические секции и проч. Тройной Не сильно отличается. Там есть только высокоуровневые встроенные в язык примитивы синхронизации типа автоматически синхронизированных блоков кода и автоматически синхронизированных методов класса. > спинлок нужен для быстрой многопоточной работы с b+ индексами. Поясню: > один поток начинает читать индекс, второй тоже хочет читать. Если тупо > блокировать работу с индексом - огромное падение производительности, > т.к. второй поток вынужден ждать окончания чтения, вместо выполнения > параллельно. Поэтому надо вводить 3 состояния - чтение, запись, > не_используется и на их основе строить логику новой спинблокировки. На самом деле есть специальные алгоритмы прохода по дереву, которые позволяют не блокировать дерево целиком. А конкретные страницы индекса блокируются обычными блокировками страниц данных в рамках транзакций. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 11:05 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
SoFx00разработать клиент-серверную реляционную СУБД. Это мой КУРСОВОЙ в универе, ничего больше Я фигею, господа. Оказывается есть некий универ, где такая задача это всего лишь курсовой. Если это так, то в стране должны производиться десятки клиент-серверных реляционных СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 11:18 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Э-э-э... Т.е. ты не читал Рихтера? Там целая глава посвящена именно разводу читателей и писателей. Двумя мутексами. Точно Двумя ? з.ы. Рихтера не читал, но ИМХО это невозможно двумя. Потому мне неизвестна операция( системный вызов) способный атомарно ( за одни вызов) проверить + взвести 2 мутекса одновременно. Все это нужно защищать 3-им мутексом на входе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 11:34 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
Синхронизатор мне неизвестна операция( системный вызов) способный атомарно ( за одни вызов) проверить + взвести 2 мутекса одновременно. WaitForMultipleObjects()? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 12:51 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Синхронизатор мне неизвестна операция( системный вызов) способный атомарно ( за одни вызов) проверить + взвести 2 мутекса одновременно. Wait ForMultipleObjects()? Не то. MSDN Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses. Нужно не проверить, а атомарно взвести так, что бы никто другой не вскочил между 2 -мя операциями с разными мутексами, а лучше вообще за один системный вызов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:02 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
MasterZiv smansdb пишет: > На Java синхронизация многопоточности выполняется элементарно… Это гон. Она везде одинаково сложна. Не сама синхронизация (она везде проста), а проектирование приложения таким образом, чтобы правильно делать синхронизацию. +1 MasterZiv На самом деле есть специальные алгоритмы прохода по дереву, которые позволяют не блокировать дерево целиком. А конкретные страницы индекса блокируются обычными блокировками страниц данных в рамках транзакций. Искал такие алгоритмы, не нашёл. Ну и времени не было. Насчёт блокировки конкретных страниц - это конечно да, но что делать, если страница дерева расщепляется (ну или сливаются две), а другие потоки где-то рядом? Поэтому делал на уровне работы со всем деревом - чтение (может быть много потоков), запись (только 1 поток), unused. авторЯ фигею, господа. Оказывается есть некий универ, где такая задача это всего лишь курсовой. Если это так, то в стране должны производиться десятки клиент-серверных реляционных СУБД. Вы считаете, что я лгу? Тема - результат моей самоуверенности, универ - в Минске, БГУИР называется. автор проверить + взвести 2 мутекса одновременно. Все это нужно защищать 3-им мутексом на входе. У меня вообще используется один синхронизирующий примитив - одна спинлок-переменная) Приоритет при синхронизации больше у читателей и это лучше для колоночной СУБД, т.к. они select-ориентированные. Ладно, пойду искать в Рихтере вышеназванный пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:14 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
синхронизатор а лучше вообще за один системный вызов. вроде нашел http://msdn.microsoft.com/en-us/library/ms686360%28VS.85%29.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:16 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
синхронизаторсинхронизатор а лучше вообще за один системный вызов. вроде нашел http://msdn.microsoft.com/en-us/library/ms686360%28VS.85%29.aspx Minimum supported client - Windows Vista Minimum supported server - Windows Server 2008 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:27 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
синхронизаторНужно не проверить, а атомарно взвести Что такое "взвести" для мутекса? Не "подождать" ли пока он не освободится? Если ты скормишь ей два мутекса, то она не вернётся пока оба они не будут "взведены". И это системный вызов. Один. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:32 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov синхронизаторНужно не проверить, а атомарно взвести Что такое "взвести" для мутекса? Не "подождать" ли пока он не освободится? Если ты скормишь ей два мутекса, то она не вернётся пока оба они не будут "взведены". И это системный вызов. Один. Все равно, что то не сходится. Как проверить оба , а взвести только один ? За один вызов естественно . з.ы. прошу прощения за возможно глупый вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 15:35 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
MasterZiv smansdb пишет: > На Java синхронизация многопоточности выполняется элементарно… Это гон. Она везде одинаково сложна. Не сама синхронизация (она везде проста), а проектирование приложения таким образом, чтобы правильно делать синхронизацию. Самый простой вариант "проектирования приложения" для клиент-серверной архитектуры: 1. Взять легкую однопользовательскую СУБД. 2. Разработать анализатор входных запросов для разделения их на два типа SELECT и EDIT (UPDATE, CREATE, INSERT ...). 3. Разработать синхронизирующий модуль. Вы хоть знаете Java? Собственно синхронизирующий объект используется только для операции EDIT. Если эта операция выполняется все остальные потоки ждут в очереди. Один поток соответствует одному пользователю. Что непонятно? Не забывайте это курсовик и не требуется супер-пупер оптимизация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 22:12 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
SoFx00 wrote: > Искал такие алгоритмы, не нашёл. Ну и времени не было. Насчёт блокировки Кажется есть у Гарсия-молино, Ульман, Уидом. И в Transaction processing by Grey & Bernstain. Хотя точно не помню. > конкретных страниц - это конечно да, но что делать, если страница дерева > расщепляется (ну или сливаются две), а другие потоки где-то рядом? Блокируются все изменяемые страницы. > Поэтому делал на уровне работы со всем деревом - чтение (может быть > много потоков), запись (только 1 поток), unused. В реяльной СУБД тебя бы за такое ... Ну да ладно, для учебного примера и это -- очень и очень здорово. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 10:09 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
MasterZiv > конкретных страниц - это конечно да, но что делать, если страница дерева > расщепляется (ну или сливаются две), а другие потоки где-то рядом? Блокируются все изменяемые страницы. Если меняется размер дерева, то дерево или бренч нужно блокировать целяком, тоже разделяя читателей и писателей. Если при проектировке что то не было учтено, веселая отладка получается, с одной стороны непредсказуемое поведение , с другой дедлоки. В конечном итоге, как правило, синхронизация переписывается с доучтением. MasterZiv > Поэтому делал на уровне работы со всем деревом - чтение (может быть > много потоков), запись (только 1 поток), unused. В реяльной СУБД тебя бы за такое ... Некто Джерик, до такого даже и близко не додумался. Если бы додумался, то на каждой странице рассказывал бы нам о передовых технологиях разделения ресурсов между читателями и писателями и их влияния на супер-производительность. ) MasterZiv Ну да ладно, для учебного примера и это -- очень и очень здорово. +1 Автору респект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 11:26 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
синхронизатор wrote: > Если меняется размер дерева, то дерево или бренч нужно блокировать целяком, > тоже разделяя читателей и писателей. Что такое "размер дерева" -- не понятно точно так же, как и то, зачем блокировать всё дерево целиком. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 12:47 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
MasterZiv синхронизатор wrote: > Если меняется размер дерева, то дерево или бренч нужно блокировать целяком, > тоже разделяя читателей и писателей. Что такое "размер дерева" -- не понятно точно так же, как и то, зачем блокировать всё дерево целиком. Имеется ввиду ращепление или объединение ветвей, удаление ветвей. Приблизительно сценарий выглядит так : В бренче который ращепляется , объеденяется, удаляется уже есть заблокированные страницы на чтение. Теоретически существует вероятность того , что сессия которая читает листовы блоки ращепляемого ( объединяемого, удаляемого ) бренча и прочитает то, что не совсем соответствует реалиям жизни . То есть прежде чем блокировать страницу, нужно просмотреть не заблокирован ли ее бренч . И наоборот, прежде чем блокировать бренч, нужно проверить все ходящие в него подбренчи и листья на предмет блокировок. Как делать эту проверку, или ждать на блокировке как у ТС, или ставить блокировки на все подчиненные бренчи листья определяется архитектурой взаимодействия нитей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 13:39 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
SoFx00 Тройной спинлок нужен для быстрой многопоточной работы с b+ индексами. Поясню: один поток начинает читать индекс, второй тоже хочет читать. Если тупо блокировать работу с индексом - огромное падение производительности, т.к. второй поток вынужден ждать окончания чтения, вместо выполнения параллельно. Поэтому надо вводить 3 состояния - чтение, запись, не_используется и на их основе строить логику новой спинблокировки. В java для этого используется rwlock http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/ReadWriteLock.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 11:35 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
ну яЯ фигею, господа. Оказывается есть некий универ, где такая задача это всего лишь курсовой. Вообще-то в моём родном универе такую курсовую дают уже второй десяток лет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 17:57 |
|
||
|
Разработка СУБД, вопросы
|
|||
|---|---|---|---|
|
#18+
MasterZiv SoFx00 wrote: > Искал такие алгоритмы, не нашёл. Ну и времени не было. Насчёт блокировки Кажется есть у Гарсия-молино, Ульман, Уидом. И в Transaction processing by Grey & Bernstain. Хотя точно не помню. > конкретных страниц - это конечно да, но что делать, если страница дерева > расщепляется (ну или сливаются две), а другие потоки где-то рядом? Блокируются все изменяемые страницы. > Поэтому делал на уровне работы со всем деревом - чтение (может быть > много потоков), запись (только 1 поток), unused. В реяльной СУБД тебя бы за такое ... Ну да ладно, для учебного примера и это -- очень и очень здорово. Posted via ActualForum NNTP Server 1.4 А расскажи про реальный мир? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2010, 18:09 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=36412984&tid=1552758]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 370ms |

| 0 / 0 |
