powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Разработка СУБД, вопросы
25 сообщений из 50, страница 2 из 2
Разработка СУБД, вопросы
    #36404421
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, на Java очень богатая библиотека примитивов синхронизации, в том числе атомарные операции, неблокирующие очереди и прочие радости современной науки :)
Стоит их внимательно изучить перед реализацией, там много уже готового.

Теоретически, для курсовой работы, Java - вполне себе язык для разработки БД. Тем более что БД на Java вполне себе есть, даже opensource :)

Проблемы будут со сборкой мусора под нагрузкой, но и они решаемые.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404425
SoFx00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DPH3Хм, на Java очень богатая библиотека примитивов синхронизации, в том числе атомарные операции, неблокирующие очереди и прочие радости современной науки :)
Стоит их внимательно изучить перед реализацией, там много уже готового.

Теоретически, для курсовой работы, Java - вполне себе язык для разработки БД. Тем более что БД на Java вполне себе есть, даже opensource :)

Проблемы будут со сборкой мусора под нагрузкой, но и они решаемые.

Поверю на слово, скорее всего так и есть: там бы это всё выглядело более строго) Но всё-таки java - не технология для написания БЫСТРОЙ Субд. Компилируемые C/C++ в любом случае быстрее. А мне ведь ещё надо было адекватно сравнить с MySql и прочими)

ЗЫ А атомарные операции поддерживаются на уровне процессора.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404429
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoFx00
один поток начинает читать индекс, второй тоже хочет читать. Если тупо
блокировать работу с индексом - огромное падение производительности,
т.к. второй поток вынужден ждать окончания чтения, вместо выполнения
параллельно. Поэтому надо вводить 3 состояния - чтение, запись,
не_используется и на их основе строить логику новой спинблокировки.

Э-э-э... Т.е. ты не читал Рихтера? Там целая глава посвящена именно
разводу читателей и писателей. Двумя мутексами.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404438
SoFx00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЭ-э-э... Т.е. ты не читал Рихтера? Там целая глава посвящена именно
разводу читателей и писателей. Двумя мутексами.

Читал. Но такого если честно не помню. В любом случае задача решена лично мною, без подсказок, причём решение в итоге вышло достаточно изящное... Хотя обидно будет, если убил время на изобретение велосипеда)
Ну и к слову, мьютексы использовать для синхронизации внутри одного процесса - плохо. Переключение в режим ядра занимает много процессорного времени)
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404571
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИз тех вопросов которые он задает 3 качественных курсовых можно сделать.

И на диплом и даже на дисерт хватит при должном подходе.


ТОЧНО:)
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404772
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smansdb пишет:

> На Java синхронизация многопоточности выполняется элементарно…

Это гон. Она везде одинаково сложна. Не сама синхронизация (она
везде проста), а проектирование приложения таким образом, чтобы
правильно делать синхронизацию.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404790
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoFx00 пишет:

> Java - это не язык для написания быстрой СУБД. Я плохо знаком с явой, но
> вряд ли средства синхронизации в ней сильно отличаются от имеющихся на
> Win32 и алгоритмических: те же критические секции и проч. Тройной

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

> спинлок нужен для быстрой многопоточной работы с b+ индексами. Поясню:
> один поток начинает читать индекс, второй тоже хочет читать. Если тупо
> блокировать работу с индексом - огромное падение производительности,
> т.к. второй поток вынужден ждать окончания чтения, вместо выполнения
> параллельно. Поэтому надо вводить 3 состояния - чтение, запись,
> не_используется и на их основе строить логику новой спинблокировки.

На самом деле есть специальные алгоритмы прохода по дереву, которые
позволяют не блокировать дерево целиком. А конкретные страницы
индекса блокируются обычными блокировками страниц данных в рамках
транзакций.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404811
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoFx00разработать клиент-серверную реляционную СУБД. Это мой КУРСОВОЙ в универе, ничего больше
Я фигею, господа. Оказывается есть некий универ, где такая задача это всего лишь курсовой. Если это так, то в стране должны производиться десятки клиент-серверных реляционных СУБД.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36404844
синхронизатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Э-э-э... Т.е. ты не читал Рихтера? Там целая глава посвящена именно
разводу читателей и писателей. Двумя мутексами.


Точно Двумя ?

з.ы. Рихтера не читал, но ИМХО это невозможно двумя.
Потому мне неизвестна операция( системный вызов) способный атомарно ( за одни вызов)
проверить + взвести 2 мутекса одновременно. Все это нужно защищать 3-им мутексом на входе.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36405048
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синхронизатор
мне неизвестна операция( системный вызов) способный атомарно ( за одни
вызов) проверить + взвести 2 мутекса одновременно.

WaitForMultipleObjects()?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36405077
синхронизатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 -мя операциями с разными мутексами,
а лучше вообще за один системный вызов.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36405119
SoFx00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
smansdb пишет:

> На Java синхронизация многопоточности выполняется элементарно…

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


+1

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


Искал такие алгоритмы, не нашёл. Ну и времени не было. Насчёт блокировки конкретных страниц - это конечно да, но что делать, если страница дерева расщепляется (ну или сливаются две), а другие потоки где-то рядом? Поэтому делал на уровне работы со всем деревом - чтение (может быть много потоков), запись (только 1 поток), unused.

авторЯ фигею, господа. Оказывается есть некий универ, где такая задача это всего лишь курсовой. Если это так, то в стране должны производиться десятки клиент-серверных реляционных СУБД.

Вы считаете, что я лгу? Тема - результат моей самоуверенности, универ - в Минске, БГУИР называется.

автор
проверить + взвести 2 мутекса одновременно. Все это нужно защищать 3-им мутексом на входе.


У меня вообще используется один синхронизирующий примитив - одна спинлок-переменная) Приоритет при синхронизации больше у читателей и это лучше для колоночной СУБД, т.к. они select-ориентированные.
Ладно, пойду искать в Рихтере вышеназванный пример.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36405129
синхронизатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
синхронизатор

а лучше вообще за один системный вызов.


вроде нашел

http://msdn.microsoft.com/en-us/library/ms686360%28VS.85%29.aspx
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36405155
синхронизатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
синхронизаторсинхронизатор

а лучше вообще за один системный вызов.


вроде нашел

http://msdn.microsoft.com/en-us/library/ms686360%28VS.85%29.aspx

Minimum supported client - Windows Vista
Minimum supported server - Windows Server 2008
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36405167
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
синхронизаторНужно не проверить, а атомарно взвести

Что такое "взвести" для мутекса? Не "подождать" ли пока он не
освободится? Если ты скормишь ей два мутекса, то она не вернётся пока
оба они не будут "взведены".
И это системный вызов. Один.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36405548
синхронизатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
синхронизаторНужно не проверить, а атомарно взвести

Что такое "взвести" для мутекса? Не "подождать" ли пока он не
освободится? Если ты скормишь ей два мутекса, то она не вернётся пока
оба они не будут "взведены".
И это системный вызов. Один.


Все равно, что то не сходится.

Как проверить оба , а взвести только один ?
За один вызов естественно .

з.ы. прошу прощения за возможно глупый вопрос.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36406393
smans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
smansdb пишет:

> На Java синхронизация многопоточности выполняется элементарно…

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

Самый простой вариант "проектирования приложения" для клиент-серверной архитектуры:
1. Взять легкую однопользовательскую СУБД.
2. Разработать анализатор входных запросов для разделения их на два типа SELECT и EDIT (UPDATE, CREATE, INSERT ...).
3. Разработать синхронизирующий модуль. Вы хоть знаете Java? Собственно синхронизирующий объект используется только для операции EDIT. Если эта операция выполняется все остальные потоки ждут в очереди. Один поток соответствует одному пользователю.

Что непонятно? Не забывайте это курсовик и не требуется супер-пупер оптимизация.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36406819
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoFx00 wrote:

> Искал такие алгоритмы, не нашёл. Ну и времени не было. Насчёт блокировки

Кажется есть у Гарсия-молино, Ульман, Уидом.
И в Transaction processing by Grey & Bernstain.
Хотя точно не помню.

> конкретных страниц - это конечно да, но что делать, если страница дерева
> расщепляется (ну или сливаются две), а другие потоки где-то рядом?

Блокируются все изменяемые страницы.

> Поэтому делал на уровне работы со всем деревом - чтение (может быть
> много потоков), запись (только 1 поток), unused.

В реяльной СУБД тебя бы за такое ...


Ну да ладно, для учебного примера и это -- очень и очень здорово.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36406982
синхронизатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv

> конкретных страниц - это конечно да, но что делать, если страница дерева
> расщепляется (ну или сливаются две), а другие потоки где-то рядом?

Блокируются все изменяемые страницы.


Если меняется размер дерева, то дерево или бренч нужно блокировать целяком,
тоже разделяя читателей и писателей.

Если при проектировке что то не было учтено,
веселая отладка получается, с одной стороны непредсказуемое поведение ,
с другой дедлоки.
В конечном итоге, как правило, синхронизация переписывается с доучтением.

MasterZiv
> Поэтому делал на уровне работы со всем деревом - чтение (может быть
> много потоков), запись (только 1 поток), unused.

В реяльной СУБД тебя бы за такое ...


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

MasterZiv
Ну да ладно, для учебного примера и это -- очень и очень здорово.


+1
Автору респект.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36407232
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
синхронизатор wrote:

> Если меняется размер дерева, то дерево или бренч нужно блокировать целяком,
> тоже разделяя читателей и писателей.

Что такое "размер дерева" -- не понятно точно так же, как и то, зачем
блокировать всё дерево целиком.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36407417
синхронизатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
синхронизатор wrote:

> Если меняется размер дерева, то дерево или бренч нужно блокировать целяком,
> тоже разделяя читателей и писателей.

Что такое "размер дерева" -- не понятно точно так же, как и то, зачем
блокировать всё дерево целиком.



Имеется ввиду ращепление или объединение ветвей, удаление ветвей.
Приблизительно сценарий выглядит так :
В бренче который ращепляется , объеденяется, удаляется уже есть
заблокированные страницы на чтение.
Теоретически существует вероятность того , что сессия которая
читает листовы блоки ращепляемого ( объединяемого, удаляемого ) бренча
и прочитает то, что не совсем соответствует реалиям жизни .
То есть прежде чем блокировать страницу, нужно просмотреть не заблокирован
ли ее бренч . И наоборот, прежде чем блокировать бренч,
нужно проверить все ходящие в него подбренчи и листья на предмет блокировок.

Как делать эту проверку, или ждать на блокировке как у ТС, или ставить блокировки на
все подчиненные бренчи листья определяется архитектурой взаимодействия нитей.
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36411697
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoFx00
Тройной спинлок нужен для быстрой многопоточной работы с b+ индексами. Поясню: один поток начинает читать индекс, второй тоже хочет читать. Если тупо блокировать работу с индексом - огромное падение производительности, т.к. второй поток вынужден ждать окончания чтения, вместо выполнения параллельно. Поэтому надо вводить 3 состояния - чтение, запись, не_используется и на их основе строить логику новой спинблокировки.

В java для этого используется rwlock http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/ReadWriteLock.html
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36412984
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яЯ фигею, господа. Оказывается есть некий универ, где такая задача это всего лишь курсовой.
Вообще-то в моём родном универе такую курсовую дают уже второй десяток лет...
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36915281
Фотография mriadus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
SoFx00 wrote:

> Искал такие алгоритмы, не нашёл. Ну и времени не было. Насчёт блокировки

Кажется есть у Гарсия-молино, Ульман, Уидом.
И в Transaction processing by Grey & Bernstain.
Хотя точно не помню.

> конкретных страниц - это конечно да, но что делать, если страница дерева
> расщепляется (ну или сливаются две), а другие потоки где-то рядом?

Блокируются все изменяемые страницы.

> Поэтому делал на уровне работы со всем деревом - чтение (может быть
> много потоков), запись (только 1 поток), unused.

В реяльной СУБД тебя бы за такое ...


Ну да ладно, для учебного примера и это -- очень и очень здорово.
Posted via ActualForum NNTP Server 1.4
А расскажи про реальный мир?
...
Рейтинг: 0 / 0
Разработка СУБД, вопросы
    #36915284
Фотография mriadus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в универе, а в человеке.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Разработка СУБД, вопросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]