|
|
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
gardenmanА затем, что если скипнуть лоченные записи не узнать реального положения дел в настоящий момент)) :D А это уже нафиг не интересно с точки зрения постановки задачи. Там сказано - зарезервировать 50 билетов, for update это позволяет. Еще там сказано не мешать другим транзакциям, skip locked это позволяет. Если хочешь - иди в тот топик и придумывай другую задачу. Будет этакое соревнование: сумеет ли gardenman придумать задачу, которую Oracle не сумеет решить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 17:25 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
DPH В СУБД "изменение таблички в памяти" требует ее изменения на диске, сохранения лога транзакции, весьма недешевую проверку блокировок и т.п непонял, вы считаете что это все лишнее ? DPH Для AppServer, даже если не рассматривать асинхронные варианты persistance, все гораздо дешевле - нет блокировок, выполняется команда insert, а не update. для того чтоб в случае сбоя воставновить ваш объект вы обязаны писать в персистент хранилище и не асинхронно а "сию секунду", т.е. тут съэкономить не удастся. к тому же изменение таблички не требует ее изменения на диске (надеюсь вы в курсе что требуется лишь последовательная запись в лог) DPH Я неоднократно играл с подобными схемами, выигрыш от варианта "update объекта в кэше, вставка изменения в базу" по сравнению с "update поля в базе" зачастую более чем в десять раз. Ну и, конечно, никаких блокировок (вернее, блокировка по объекту AppServer, но она очень быстрая). неверю, геморой по синхранизации объекта с субд не окупится, расскажите plz что вы будете желать если после обновления объекта связь с субд пропала ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 17:29 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
Yo.!непонял, вы считаете что это все лишнее ? Для задачи "возвращать актуального лидера" это действительно лишнее. Yo.!для того чтоб в случае сбоя воставновить ваш объект вы обязаны писать в персистент хранилище Это insert, следовательно без блокировок, следовательно горлышком являются только возможности железа. Yo.!неверю, геморой по синхранизации объекта с субд не окупится, Тут Вы вряд ли правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 17:41 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
softwarer Это insert, следовательно без блокировок, следовательно горлышком являются только возможности железа. чудес не бывает, вместо блокировки в субд у него будет блокировка в объекте в чем разница ? softwarer Yo.!неверю, геморой по синхранизации объекта с субд не окупится, Тут Вы вряд ли правы. расшифруй, мне не понятно если я сначало обновляю объект, а потом асинхронно пишу в хранилище то в случае сбоя получу lost update ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 17:54 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
Yo.!чудес не бывает, вместо блокировки в субд у него будет блокировка в объекте в чем разница ? В том, что с объектом не делается "персистентных" операций, а следовательно блокировка удерживается на нем много меньше времени. Держать же эту блокировку на время персистентных операций совершенно необязательно. Yo.!расшифруй, мне не понятно если я сначало обновляю объект, а потом асинхронно пишу в хранилище то в случае сбоя получу lost update Хм. Вообще тут опять-таки надо плясать от постановки задачи; я бы сказал, весьма вероятна постановка "в случае неустранимого аппаратного сбоя аукцион переигрывается с начала". Если предположить, что ставки надо заведомо сохранять, безусловно, писать в хранилище нужно синхронно и с начала. Но блокировку на "объекте" при этом держать совершенно не нужно; после успешной записи накладывается короткая блокировка и new_leading_bid := max ( new_leading_bid, current_bid ), все. Возникает вопрос, что делать, если запись попала в хранилище и в этот момент рухнул аппсервер. Ответ - да ничего, как он поднимется, так и сделает select max() из хранилища. Это же относится к случаю, если аппсерверов несколько; обслуживание объекта перейдет на другой сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 18:10 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
softwarerМини-откаты обеспечивают write consistency, однако с read consistency они связаны не более, чем с какой-либо другой из основных концепций.Хм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 20:53 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
softwarerСудя по описанию, Вы говорите о весьма специфическом случае. На нормальных аукционах afaik торгуются до максимальной цены, а не до фиксированного времени завершения торгов. eBay - это нормальный аукцион или нет? Ради интереса найдите лот на iPod Nano 2Gb в последние 2 минуты торгов в вечернее время (американское) и полюбуйтесь на бурю страстей. P.S. Насколько я помню, у них активные лоты в завершающей стадии обрабатываются другим сервером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2007, 22:35 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
Yo.! для того чтоб в случае сбоя воставновить ваш объект вы обязаны писать в персистент хранилище и не асинхронно а "сию секунду", т.е. тут съэкономить не удастся Гм, на всякий случай сообщаю, что есть куча систем гарантированной доставки сообщения. В некоторых случаях производительность при использовании MQ, например, сильно повышается. Впрочем, это уже некоторая экзотика, я с ней дела непосредственно не имел, мне пока хватает синхнонных схем. DPH Я неоднократно играл с подобными схемами, выигрыш от варианта "update объекта в кэше, вставка изменения в базу" по сравнению с "update поля в базе" зачастую более чем в десять раз. Ну и, конечно, никаких блокировок (вернее, блокировка по объекту AppServer, но она очень быстрая). неверю, геморой по синхранизации объекта с субд не окупится, расскажите plz что вы будете желать если после обновления объекта связь с субд пропала ?[/quot] Гм, а зря не веришь. Синхронизация объекта с БД - элементарна: в БД лежит начальное значение на некий момент времени, при каждом изменении в отдельную таблицу в рамках транзакции пишется "дельта" (insert, без блокировок). на AppServer в кэше живет только актуальное значение, кэш освобождается по времени или по переполнению, изменение кэша синхронизируется (это все практически бесплатно). При откате транзакции кэш в AppServer, понятное дело, корректируется (что легко). Если упал AppServer или значения в кэше нет - то новое значение рассчитываем по начальному и дельтам (единственная блокирующая транзакция, но очень редкая). Реально на тестах такая схема показала примерно 2х кратный выигрыш при отсутствии конкуренции и 20ти кратный - при большой конкуренции по одному элементу. Да, разумеется, просто чтение значения в любом случае до БД не доходит (если есть запись в кэше). Вообще, смотри архитектуру ebay, неэлементарные транзакции в больших системах - зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 18:35 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
softwarer Если предположить, что ставки надо заведомо сохранять, безусловно, писать в хранилище нужно синхронно и с начала. Вообще, если говорить об оччень больших системах, то кластерный MQ-сервер с гарантией доставки и высокопроизводительным хранилищем, заточенным именно на временное хранение сообщений дает ту же надежность, что и синхронное хранение (но уменьшает некоторые затраты и упрощает зачастую кластеризацию). Но это уже недешевое удовольствие.... А 1000 операций в секунду можно получить и с бесплатным софтом и дешевым железом. Правда, на RAID придется потратиться. Ну и на программистов. DB/2 Express C + log shipping в этом случае - замечательный выбор, все компоненты уже готовы, а кластер получается надежный и простой. И бесплатный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 18:50 |
|
||
|
Выбор СУБД
|
|||
|---|---|---|---|
|
#18+
Anton DemidoveBay - это нормальный аукцион или нет? Не знаю. Возможно, я отстал от жизни; я вообще не слишком понимаю смысла аукциона на серийную вещь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 20:01 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=34352548&tid=1553359]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 364ms |

| 0 / 0 |
