Discussion:
Можно ли увеличить производительности SQL сервера, добавив новый комп. PC к обработке запросов?
(слишком старое сообщение для ответа)
Dmitry N.Ananyev
2005-07-02 08:55:09 UTC
Permalink
Можно ли увеличить производительности SQL сервера, добавив новый комп. PC к
обработке запросов?

То есть логически база должная быть одна.

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

Можно ли не переходить на 1, но 5-процессорный эксклюзивный и поэтому
дорогой и в дальнейшем неликвидный сервер, а сделать систему обработки из 5
типовых персональных компьютеров?

Приходят запросы и по порядку:
1-ый - обрабатывается 1-ым PC
2-ый - обрабатывается 2-ым PC
3-ый - обрабатывается 3-м PC
4-ый - обрабатывается 4-м PC
5-ый - обрабатывается 5-м PC

и типо нет очереди запросов.

Или это в принципе невозможно?
Миклашевич Антон
2005-07-03 03:00:59 UTC
Permalink
Hello, Dmitry!
You wrote on Sat, 2 Jul 2005 08:55:09 +0000 (UTC):

DN> То есть логически база должная быть одна.

DN> Один персональный компьютер PC имеет аппаратные ограничения, которые
DN> лимитируют производительность обработки данных.
DN> К примеру допустим запросов будет очень много и они не успевают
DN> обрабатываться и возникло желание увеличить аппаратные возможности.

DN> Можно ли не переходить на 1, но 5-процессорный эксклюзивный и поэтому
DN> дорогой и в дальнейшем неликвидный сервер, а сделать систему обработки
DN> из 5 типовых персональных компьютеров?

DN> Приходят запросы и по порядку:
DN> 1-ый - обрабатывается 1-ым PC
DN> 2-ый - обрабатывается 2-ым PC
DN> 3-ый - обрабатывается 3-м PC
DN> 4-ый - обрабатывается 4-м PC
DN> 5-ый - обрабатывается 5-м PC

Запросы на чтение? Легко: на каждом по копии БД. Используй среднее звено -
пусть и занимается диспетчеризацией запросов. Только лучше использовать не
PC, а серверы. По такой технологии работают многие поисковые службы в Инете.
Dmitry N.Ananyev
2005-07-03 10:40:34 UTC
Permalink
Легко: на каждом по копии БД. Используй среднее звено - пусть и
занимается диспетчеризацией запросов. Только лучше использовать не PC, а
серверы. По такой технологии работают многие поисковые службы в Инете.
Собственно инет и имелся ввиду.
А можно зделать так ?
- на 5 компах - 5 автономных web серверов (IIS) + 5 реплицирующихся между
собой баз.

Приходит запрос от интернет-клиента, на некое устройство-диспетчер, не
имеющее каких либо прикладных web-страничек - и этот диспетчер как-то
поочереди направляет запрос к 1/5 web-серверу, где уже и web-странички и
базы .

И может быть репликация баз "в реальном времени" сразу между 5 компами и
насколько она их загрузит?
То есть идея то увеличить производительность, а не ее уменьшить.

Вот что это за диспетчер такой нужен?
Вопрос пока теоретического плана.
Valentine Ryazanov
2005-07-04 07:33:48 UTC
Permalink
Dmitry wrote to Миклашевич Антон on Sun, 03 Jul 2005 23:40:

??>> Легко: на каждом по копии БД. Используй среднее звено - пусть и
??>> занимается диспетчеризацией запросов. Только лучше использовать не PC,
??>> а серверы. По такой технологии работают многие поисковые службы в
??>> Инете.
DN> Собственно инет и имелся ввиду.
DN> А можно зделать так ?
DN> - на 5 компах - 5 автономных web серверов (IIS) + 5 реплицирующихся
DN> между собой баз.
DN> Приходит запрос от интернет-клиента, на некое устройство-диспетчер, не
DN> имеющее каких либо прикладных web-страничек - и этот диспетчер как-то
DN> поочереди направляет запрос к 1/5 web-серверу, где уже и web-странички
DN> и базы .

[...]

DN> Вот что это за диспетчер такой нужен?
DN> Вопрос пока теоретического плана.

В простейшем и не имеющем прямого отношения к mssql варианте:
=========Beginning of the citation==============
Configuring round robin
Round robin is a local balancing mechanism used by DNS servers to share and
distribute network resource loads. You can use it to rotate host (A)
resource records (RRs) contained in a query answer if multiple A RRs for a
host name are found.

By default, the DNS Server service uses round robin to order resource
records returned in an answer of the host name resolved to more than one
mapped RR. This feature provides a simple method for load balancing client
use of Web servers and other frequently queried multihomed computers.

For round robin to work, multiple A RRs for the queried name must first be
registered in the zone. If round robin is disabled for a DNS server, the
order of the response for these queries is based on a static ordering of RRs
in the answer list as they are stored in the zone (either its zone file or
Active Directory).
=========The end of the citation================

...и так далее. Цитата из справки по MS DNS Server.
Клиенты, разумеется, должны обращаться к серверам по доменным именам, а не
ip-адресам.

--
WBW, Valentine Ryazanov.
Dmitry V. Liseev
2005-07-07 15:46:19 UTC
Permalink
"Dmitry N.Ananyev" <***@relcom.ru> wrote in message news:da8faq$30mb$***@ddt.demos.su...

Hi!
Post by Dmitry N.Ananyev
Легко: на каждом по копии БД. Используй среднее звено - пусть и
занимается диспетчеризацией запросов. Только лучше использовать не PC, а
серверы. По такой технологии работают многие поисковые службы в Инете.
Собственно инет и имелся ввиду.
А можно зделать так ?
- на 5 компах - 5 автономных web серверов (IIS) + 5 реплицирующихся между
собой баз.
Если тебе именно на MS-SQL нужно, то не знаю, как это сделать. У меня
так и не получилось. MS-SQL очень плохо масштабируется. Я использую
другую технологию - MUMPS. У меня 7 серверов в системе обслуживают более
тысячи клиентов одновременно на самом дешевом железе. Это масштабирование
сервер обеспечивает автоматически. Сделать это на реплицирующихся
базах, разумеется, невозможно. Хитрость в том, что серверов приложений
6 штук (теоретически неограничено) и именно они выполняют все SQL запросы,
а сервер БД всего один и он никаких запросов не выполняет, только хранит
данные и разруливает блокировки с транзакциями. У каждой машины по одному
процессору и гигу памяти. Сервера приложений имеет по две сетевые
карты: одна для общения с клиентами, другая для общения с сервером БД.
Грамотно настроенные свичи и роутеры в сети. Тестировалось на полторы
тысячи одновременных подключений. Заказчик остался доволен. Конкуренты
пытались поставить свою систему на Oracle, но не смогли продемонстрировать
одновременную работу более ста клиентов даже на более мощном оборудовании.
Post by Dmitry N.Ananyev
Приходит запрос от интернет-клиента, на некое устройство-диспетчер, не
имеющее каких либо прикладных web-страничек - и этот диспетчер как-то
поочереди направляет запрос к 1/5 web-серверу, где уже и web-странички и
базы .
А сессию ты как будешь поддерживать, если каждый следующий
запрос от одного клиента на разные web-сервера отправляешь?
Post by Dmitry N.Ananyev
И может быть репликация баз "в реальном времени" сразу между 5 компами и
насколько она их загрузит?
Это невозможно. Репликация - по определению изменение данных
только на одном компьютере и передача этих изменений на остальные
компьютеры в одну сторону. То есть на одном меняешь и читаешь,
на остальных четырех только читаешь. Польза от нее в том, что
читателей может быть сколько угодно и они никак не мешают писателям.
Писателей разнести на разные компьютеры невозможно. Они все равно
будут друг-другу мешать. Проблема в методах изолирования транзакций,
применяющихся на конкретной архитектуре СУБД. Если два разных сервера
с двумя копиями одной базы данных начнут изменять одну строку
в одной таблице, что будешь делать?
Post by Dmitry N.Ananyev
То есть идея то увеличить производительность, а не ее уменьшить.
Нужно брать компьютеры и тестировать. Но для начала
почитать много-много книжек про механизмы изолирования
транзакций, блокировочные, многоверсионные, технологии
распределенной обработки данных и т.д. Тогда становится
понятно, какие факторы влияют на масштабируемость.
Post by Dmitry N.Ananyev
Вопрос пока теоретического плана.
Все это уже 30 лет назад стало практикой ;) Еще когда MS в помине
не было ;) Распределенные терабайтные базы данных и десятки тысяч
клиентов одновременно в одной системе - уже давно реальность. Хотя
у моих заказчиков пока запросы поскромнее, но масштабируемость
системы их волнует в первую очередь. Мы используем Cache, как
одну из реализаций M-технологии.
Это не реляционная система. Эта технология появилась задолго
до создания первых реляционных баз данных и до сих пор значительно
превосходит их по производительности и масштабируемости.
Это не реклама. Селяви. Если хочешь заниматься именно
высокомасштабируемыми распределенными системами, советую
посмотреть в сторону M-технологии. Она для этих задач создавалась.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73
Миклашевич Антон
2005-07-07 23:11:18 UTC
Permalink
Hello, Dmitry!
You wrote to Dmitry N.Ananyev on Thu, 7 Jul 2005 15:46:19 +0000 (UTC):

DVL> Hi!

??>>> Легко: на каждом по копии БД. Используй среднее звено - пусть и
??>>> занимается диспетчеризацией запросов. Только лучше использовать не
??>>> PC, а серверы. По такой технологии работают многие поисковые службы в
??>>> Инете.
??>>
??>> Собственно инет и имелся ввиду.
??>> А можно зделать так ?
??>> - на 5 компах - 5 автономных web серверов (IIS) + 5 реплицирующихся
??>> между собой баз.

DVL> Если тебе именно на MS-SQL нужно, то не знаю, как это сделать. У меня
DVL> так и не получилось. MS-SQL очень плохо масштабируется. Я использую

У тебя не получилось, но не надо нам тут лапшу вешать про плохую
масштабируемость.

DVL> системы их волнует в первую очередь. Мы используем Cache, как
DVL> одну из реализаций M-технологии.
DVL> Это не реляционная система. Эта технология появилась задолго
DVL> до создания первых реляционных баз данных и до сих пор значительно
DVL> превосходит их по производительности и масштабируемости.

Ага, ну конечно - слушай хорош чушь нести. Если есть желание высказать про
то, насколько Cache превосходит все реляционные СУБД (смешно даже). Приходи
на форум db на сайте http://rsdn.ru , а здесь это оффтоп

DVL> Это не реклама. Селяви. Если хочешь заниматься именно

А что это? Не пойму зачем ты вообще в эту эху пишешь?
Dmitry V. Liseev
2005-07-08 07:29:23 UTC
Permalink
"?????????? ?????" <***@kamtel.ru> wrote in message news:42cdb674$***@news.iks.ru...

Hi!
Post by Миклашевич Антон
DVL> Если тебе именно на MS-SQL нужно, то не знаю, как это сделать. У
DVL> меня
DVL> так и не получилось. MS-SQL очень плохо масштабируется. Я использую
У тебя не получилось, но не надо нам тут лапшу вешать про плохую
масштабируемость.
А по существу есть что сказать? Если у тебя получилось, так и расскажи,
что делал и как сервер настраивал. С техническими подробностями.
Post by Миклашевич Антон
DVL> системы их волнует в первую очередь. Мы используем Cache, как
DVL> одну из реализаций M-технологии.
DVL> Это не реляционная система. Эта технология появилась задолго
DVL> до создания первых реляционных баз данных и до сих пор значительно
DVL> превосходит их по производительности и масштабируемости.
Ага, ну конечно - слушай хорош чушь нести. Если есть желание высказать про
то, насколько Cache превосходит все реляционные СУБД (смешно даже).
Приходи
на форум db на сайте http://rsdn.ru , а здесь это оффтоп
Потому и говорю, что не реклама, т.к. мне не интересно высказывать,
кто и кого превосходит. Человек спросил - я ответил, т.к. для
меня это уже давно пройденный этап, как данные реплицировать,
как транзакции изолировать, как сетевой трафик между серверами
уменьшать. И софтина работает не в единственном экземпляре
в лабораторных условиях, а у десятков заказчиков в реальной
эксплуатации. Соответственно, я и средства выбираю, более
подходящие для задачи, хотя у меня есть решения и на оракле
и на эхотаге. Просто расскажи, как ты на эхотаге на 7 дешевых
серверах будешь OLTP приложение пускать на полторы тысячи
рабочих мест. Примерно по 100 транзакций в секунду от каждого
рабочего места (всего до 10 млн. транзакций в минуту пиковой
производительности). Только не говори, что такого не бывает.

Предметная область - обработка конструкторско-технологических
данных об изделии. В современном истребителе 25 млн. деталей
и десятки километров труб и проводов. Одновременно его
конструированием занимаются тысячи человек. Каждому в реальном
времени нужна целая куча данных о характеристиках всей конструкции
в целом. Если тебе смешно, то мне нет. Мне за это деньги платят,
а не за рекламу. Заказчику пофигу, на какой СУБД и какой ОС
у него сервер работает.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73
Миклашевич Антон
2005-07-08 08:39:57 UTC
Permalink
Hello, Dmitry!
You wrote to Миклашевич Антон on Fri, 8 Jul 2005 07:29:23 +0000 (UTC):

DVL> Hi!

DVL>>> Если тебе именно на MS-SQL нужно, то не знаю, как это сделать. У
DVL>>> меня
DVL>>> так и не получилось. MS-SQL очень плохо масштабируется. Я использую
??>>
??>> У тебя не получилось, но не надо нам тут лапшу вешать про плохую
??>> масштабируемость.

DVL> А по существу есть что сказать? Если у тебя получилось, так и
DVL> расскажи, что делал и как сервер настраивал. С техническими
DVL> подробностями.

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

DVL>>> системы их волнует в первую очередь. Мы используем Cache, как
DVL>>> одну из реализаций M-технологии.
DVL>>> Это не реляционная система. Эта технология появилась задолго
DVL>>> до создания первых реляционных баз данных и до сих пор значительно
DVL>>> превосходит их по производительности и масштабируемости.
??>>

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

Знаешь, по Cache тебе сказать ничего не могу - не приходилось. Но много
дисскусий было по этому поводу - не здесь: в rsdn.ru . Я не сомневаюсь что в
какой-то специфической области он рулит, но не в OLTP точно. То, что кто-то
там не смог чего-то сделать на Oracle и пр. не говорит еще о том, что на
Oracle, к примеру, нельзя сделать решение более производительное чем на
Cache - может у твоих конкурентов просто не хватило для этого ума. Я
встречал такие решения и на Oracle, и на эхотаге, что волосы дыбом встают -
плохую программу можно написать на любом языке. Если ты не можешь подсказать
как это можно реализовать на MS SQL - ты сказал что не получилось, но
объективных причин почему именно нельзя реализовать на MS SQL не назвал, то
может и не стОит постить сюда песни о том какая прекрасная СУБД Cache.
Кстати, я что-то не припомню ошеломляющих результатов Cache на tpc.org -
пока тройка лидеров по производительности по профилю OLTP приложения:
эхотаг, Oracle, DB2

DVL> меня это уже давно пройденный этап, как данные реплицировать,
DVL> как транзакции изолировать, как сетевой трафик между серверами
DVL> уменьшать. И софтина работает не в единственном экземпляре
DVL> в лабораторных условиях, а у десятков заказчиков в реальной
DVL> эксплуатации. Соответственно, я и средства выбираю, более
DVL> подходящие для задачи, хотя у меня есть решения и на оракле
DVL> и на эхотаге. Просто расскажи, как ты на эхотаге на 7 дешевых
DVL> серверах будешь OLTP приложение пускать на полторы тысячи
DVL> рабочих мест. Примерно по 100 транзакций в секунду от каждого

Пишущих?
Dmitry V. Liseev
2005-07-08 16:39:59 UTC
Permalink
"?????????? ?????" <***@kamtel.ru> wrote in message news:42ce3bd4$***@news.iks.ru...

Hi!
Post by Миклашевич Антон
DVL> А по существу есть что сказать? Если у тебя получилось, так и
DVL> расскажи, что делал и как сервер настраивал. С техническими
DVL> подробностями.
Постой, давай разберемся - про плохую масштабируемость ты начал говорить -
вот и скажи по существу - аргументируй свои доводы.
Вот есть Oracle Parallel Server вместе с его Distributed Lock Manager.
Не будем говорить, сколько стоит железо и софт для этого. Cache
изначально распределенный на обычном железе, никаких опций
докупать не надо, надо только лицензию ему дать, разрешающую
многосерверность, она просто немного дороже стоит.

Таким образом, несколько серверов обращаются к одной копии базы
данных, разруливая по пути блокировки. Теоретически задержка
должна происходить только если два сервера попытались захватить
одну блокировку. А это зависит только от грамотного проектирования
прикладной системы специально под такую архитектуру. И еще от
задачи. Понятно, что чем больше констрейнов, тем больше неявных
зависимостей. Требование уникальности поля в таблице сразу
накладывает зависимость наличия значения этого поля в строке
от наличия такого-же значения в этого поля в другой строке. В остальных
случаях сервера работают независимо друг от друга. Это очень близко
к тому, что есть в M-технологии. Но в M-технологии используется еще
и ручное управление блокировками. Грамотно расставляя только
необходимые блокировки я могу существенно ослабить зависимости
между параллельными транзакциями. Это примеры слабо связанных
архитектур.

Что может предложить эхотаг? Разбить таблицы на куски и сделать
дистрибъютед вью? И как мне теперь создать уникальное поле
по _всей_ таблице, раскиданной на несколько серверов? А более
сложные констрейны? Например уникальный индекс по нескольким
таблицам? Имеется таблица Parent с полями ID (PK) и Name (VARCHAR)
и таблица Child с полем Name (VARCHAR) и ParentID (FK). Мне нужно,
чтобы конкатенация Parent.Name и Child.Name была уникальна.
В итоге такая архитектура при большинстве транзакций будет
задействовать сразу все сервера с интенсивным трафиком между ними.
Индексы-то оно умеет уникальные раскидывать между серверами?
И нафига тогда все это надо? Уж проще воткнуть процессоров и успокоиться
на SMP архитектуре. Ибо в эхотаге сильно связанная архитектура и в SMP
ей самое место.
Post by Миклашевич Антон
Знаешь, по Cache тебе сказать ничего не могу - не приходилось. Но много
дисскусий было по этому поводу - не здесь: в rsdn.ru.
Тем нет серъезных дискуссий. Вот в sql.ru жизнь более активна
на тему Cache, но распределенной обработки там тоже
не обсуждается.
Post by Миклашевич Антон
Я не сомневаюсь что в
какой-то специфической области он рулит, но не в OLTP точно. То, что
кто-то
там не смог чего-то сделать на Oracle и пр. не говорит еще о том, что на
Oracle, к примеру, нельзя сделать решение более производительное чем на
Cache - может у твоих конкурентов просто не хватило для этого ума.
Может быть и не хватило, но максимум, что они смогли предложить,
так это поставить сановский кластер. То есть пусть заказчик сначала
купит кластер а мы запустим и посмотрим, получилось или нет.
А я просто предложил посмотреть, что из барахла у них не используется.
и мне притащили несколько машин под Win2000 и Linux. Я поставил,
серверную часть, поставил на сотню рабочих машин "эмулятор клиента",
который в фоновом режиме периодически пускал некоторые типичные
транзакции. Померял загрузку процессоров, дисков, сетевой трафик.
Пришел к выводу, что между серверами должен быть свой собственный
сегмент сети, нашли несколько сетевых карт и хаб. Через три дня было
продемонстрировано, что в принципе, полторы тысячи клиентов - реально.
Угадай, какое решение выбрал заказчик?
Post by Миклашевич Антон
Я
встречал такие решения и на Oracle, и на эхотаге, что волосы дыбом
встают -
плохую программу можно написать на любом языке. Если ты не можешь
подсказать
как это можно реализовать на MS SQL - ты сказал что не получилось, но
объективных причин почему именно нельзя реализовать на MS SQL не назвал,
то
Я называл причины. Ты можешь поставить несколько MS SQL
с одинаковыми базами. Но если они одновременно полезут
в одну таблицу (каждый в свою копию) с модификациями, то
вся твоя репликация (как тут предлагалось) накроется
по определению. Даже если они полезут в разные таблицы,
но связанные констрейном по внешнему ключу. Репликация
при нескольких писателях не бывает.
Post by Миклашевич Антон
Кстати, я что-то не припомню ошеломляющих результатов Cache на tpc.org -
эхотаг, Oracle, DB2
А тестов Cache там и нет, ибо это типично реляционные тесты.
Нет смысла сравнивать мерседес с подводной лодкой. Я что-то
нифига не понял, сколько клиентских приложений одновременно
в этих тестах TPC было к серверу подключено? Что они вообще
тестируют? Разруливание сотен конкурирующих транзакций?
Что можно тестировать, когда тебе уже даны готовые таблицы?
При разработке на MUMPS система полностью перепроектируется
по сравнению с аналогичным реляционным решением. Таблицы
там эмулируются сервером приложений, в ядре СУБД таблиц нет.
Выполнение SQL запросов тоже эмулируется сервером приложений.
Оптимизатор SQL там слабоватенький. Это давно известно,
но это никого не огорчает, т.к. SQL-не основной, а скорее,
вспомогательный движок. Это просто надстройка над стандартным
MUMPS. Если поставить подводную лодку на колеса, то трудно
найти ошеломляющие тесты для сравнения с мерседесом.
Эта технология изначально создавалась для распределенной
обработки большого числа конкурирующих транзакций. Необязательно
брать Cache. Можно посмотреть бесплатный (для линукса)
продукт GT.M. http://www.sanchez-gtm.com/
Вообще, разных реализаций MUMPS-систем (M-систем) - как
грязи. Не думаю, что их сильно меньше, чем SQL-систем.
На MUMPS давно есть стандарт ANSI.

С таким-же успехом я могу предложить свои тесты для
своей предметной области, на которых я тестирую СУБД:

Задача 1:

Есть автомобиль, у него есть кузов, четыре колеса и две двери.
Каждая дверь состоит из корпуса и восьми болтов. Каждое
колесо из диска, шины и трех болтов. Болт весит 1 кг, диск - 3 кг,
шина - 2 кг, корпус двери - 11 кг, кузов автомобиля - 31 кг. Нужно
определить массу всех узлов и всего автомобиля.

Имеем таблицу Node:
NodeID, Weight, CalculatedWeight, MaxWeight
болт, 1, 1, NULL
диск, 3, 3, NULL
шина, 2, 2, NULL
колесо, NULL, 8 (1*3+3+2), NULL
корп. дв., 11, 11, NULL
дверь, NULL, 19 (1*8+11), NULL
кузов, 31, 31, NULL
автом., NULL, 101 (8*4+19*2+31), NULL

...и таблицу NodeLink:
ParentID, ChildID, Quantity
автом., кузов, 1
автом., дверь, 2
автом., колесо, 4
дверь, корп. дв., 1
дверь, болт, 8
колесо, диск, 1
колесо, шина, 1
колесо, болт, 3

Weight - заданная масса узла, если она NULL, то ее надо
вычислить на основе массы составных частей. Если узел
не имеет составных частей, то при попытке указать NULL
должна выдаваться ошибка. При попытке удаления
последнего узла из состава, приводящей к неопределенности
массы, тоже должна выдаваться ошибка. Например, если
из состава двери удалить ее корпус и все болты, то окажется,
что у нее нет составных частей и ее заданная масса =NULL.
Сервер должен это отлавливать и выдавать ошибку.

CalculatedWeight - вычисленная масса (если Weight=NULL),
или равная Weight (в противном случае).

MaxWeight - заданное ограничение на вычисленную массу
узла (если NOT NULL). Любые транзакции, приводящие
к превышению лимита массы для какого либо узла,
должны откатываться с соответствующим сообщением
об ошибке.

Quantity - заданное количество дочерних узлов в составе
родительского.

Все числовые значения в общем случае - неотрицательные
вещественные (это тоже должен проверять сервер).

Разумеется, в NodeLink не должно быть возможности
вставки или апдейта записей, приводящих к "закольцовыванию"
структуры. Например, нельзя добавить автомобиль
опять в состав болта. Это тоже должен проверять сервер.

В таблице Node примерно миллион записей, на каждый
узел в среднем 10 входящих линков и 10 исходящих линков,
т.е. в NodeLink всего примерно 10 млн. записей.

Любые поля в обеих таблицах меняют одновременно
100 пользователей.

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

Задача 2:

Имеем набор выражений, как в электронной таблице:
A=5, B=A+4, C=A*5+B и т.д.

Соответственно есть таблица Variables:
Name, Expression, CurrentValue
A, 5, 5
B, A+4, 9
C, A*5+B, 34

Name - уникальная строка без пробелов (сервер
должен проверять это проверять).

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

CurrentValue - вещественное число, вычисленное
значение выражения. Скорость поиска по CurrentValue
очень критична, потому поле должно быть
проиндексировано.

Попытки задания циклов вида А=B+3, а B=A*2 должны
пресекаться. Попытки использования в выражении
отсутствующих в таблице переменных должны пресекаться,
как и попытки удаления из таблицы строк, уже использующихся
в каких-то выражениях. Попытки деления на ноль сервером
должны пресекаться.

В выражении в среднем по пять переменных. Всего в таблице
10 млн. записей.

С таблицей одновременно работают 100 человек. Половина
операций - вставка, изменение, удаление, другая половина -
поиск по вычисляемому полю вида:
SELECT FROM Variables WHERE CurrentValue < 15.

После решения задачи предложить примерные варианты
действий, если количество пользователей нужно будет
увеличить до 1000 чел.
Post by Миклашевич Антон
DVL> рабочих мест. Примерно по 100 транзакций в секунду от каждого
Пишущих?
Нет. Пишущие с каждого рабочего места идут раз в полчаса,
зато сразу пачками по полторы сотни. То есть в среднем
по 1 в 10 секунд (с одного рабочего места). Проблема в том,
что они захватывают большие массивы данных.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73
Миклашевич Антон
2005-07-09 01:26:54 UTC
Permalink
Hello, Dmitry!
You wrote to Миклашевич Антон on Fri, 8 Jul 2005 16:39:59 +0000 (UTC):

[...]

DVL> Что может предложить эхотаг? Разбить таблицы на куски и сделать
DVL> дистрибъютед вью? И как мне теперь создать уникальное поле
DVL> по _всей_ таблице, раскиданной на несколько серверов? А более

Используй GUID - они рулез.

DVL> сложные констрейны? Например уникальный индекс по нескольким
DVL> таблицам? Имеется таблица Parent с полями ID (PK) и Name (VARCHAR)
DVL> и таблица Child с полем Name (VARCHAR) и ParentID (FK). Мне нужно,
DVL> чтобы конкатенация Parent.Name и Child.Name была уникальна.
DVL> В итоге такая архитектура при большинстве транзакций будет
DVL> задействовать сразу все сервера с интенсивным трафиком между ними.
DVL> Индексы-то оно умеет уникальные раскидывать между серверами?
DVL> И нафига тогда все это надо? Уж проще воткнуть процессоров и
DVL> успокоиться на SMP архитектуре. Ибо в эхотаге сильно связанная
DVL> архитектура и в SMP ей самое место.

[...]

Ладно, убедил
Dmitry N.Ananyev
2005-07-09 15:52:09 UTC
Permalink
Таким образом де-факто мы становимся очевидцами эволюции:
- Файл сервер - Клиент
- SQL сервер - Клиент
- Обьектная база - SQL эмулятор - Клиент

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

Из вспомогательных вопросов, чтобы уж уточнить общий концепт-топологии,
осталось понять - если все клиенты - это миллион интернет клиентов (в сумме
дающих 100 транзакций/сек) - то на этих 6-ти серверах с прикладными SQL
эмуляторами должно быть 6 web-серверов или все клиенты обращаются на 1
web-сервер, а на тех 6 нет никаких web-серверов ?

(1 web-сервер и какой потянет всех клиентов то и как же он будет их
раскидывать по 6 прикладным SQL серверам?)

Прошу извинить за корявость изложения вопроса.
Dmitry V. Liseev
2005-07-12 19:33:05 UTC
Permalink
"Dmitry N.Ananyev" <***@relcom.ru> wrote in message news:daorr0$12g8$***@ddt.demos.su...

Hi!
Post by Dmitry N.Ananyev
- Файл сервер - Клиент
- SQL сервер - Клиент
- Обьектная база - SQL эмулятор - Клиент
Это не совсем так. Файл-серверные СУБД были хороши во времена
терминальных систем. Там вся обработка велась одним компьютером,
который этот файл обрабатывал и к которому было подключено много
мониторов и клавиатур (терминалов). И логика всех запросов была
жестко зашита в системе. Ты мог выполнять только те запросы,
которые тебе предлагал центральный компьютер. Тогда уже были
MUMPS-системы, в которых был процедурный язык программирования
со специальными возможностями обработки данных (многомерные
индексированные массивы). Еще небыло реляционных систем.
Приходилось для каждого отчета писать программу для поиска
данных в этих массивах.

Потом появились персоналки и локальные сети. Каждый захотел
выполнять свои собственные запросы, не предусмотренные изначально
разработчиком базы, и не гонять по сети всю базу к себе, т.к. сети
были медленные. В результате появился универсальный язык
запросов SQL и теоретическая модель реляционной алгебры.
Она не обещала максимальной производительности и оптимальности,
она лишь обещала, что ты любую задачу сможешь описать с ее помощью
при минимальном программировании, пусть и не слишком оптимально.
Зато, зная структуру таблиц, сможешь вытащить любые данные,
которые хочешь. Стандартизация и простота привела к расцвету
и широкому распространению реляционных систем. Тут на MUMPS-системы
стали навешивать разные SQL-эмуляторы, которые на входе принимали
SQL-запрос и выдавали программу, ползающую по индексированным
массивам, а потом ее исполняли.

Потом, с развитием Интернет, появилось понятие "тонкого клиента",
который сам никаких вычислений не делает, только отображает, что
от сервера получил. Ибо сервер дорогой и мощный, а клиенты слабые
и дешевые. Мы опять вернулись в эпоху терминальных систем.
MUMPS-системы тоже научились изображать web-сервер, распарсивая
HTTP-запрос и генеря ответ. Ведь там _процедурный_ язык
программирования изначально. Она сама себе сервер приложений
и ей отдельный внешний web-сервер вообще не обязателен.
Вот только стандартизация SQL тут срабатывает вхолостую.
Получается, что сервер сам себе пишет SQL запросы, а потом
сам их парсит и выполняет. Пользователь через web-клиента обычно
никаких своих нестандартных запросов не отправляет. Только то,
что предусмотрел программист в интерфейсе web-клиента.
Соответственно, SQL-эмулятор можно не использовать,
всю обработку данных написать вручную и повысить производительность.

Потом сложность и навороченность пользовательского интерфейса
в web-клиентах стала расти. Для обновления окна браузера нужен большой
трафик. Потому и решили: пусть пользовательский интерфейс отдельно
живет на клиенте, а данные отдельно идут с сервера. Да и компьютеры
стали настолько дешевыми, что можно ставить клиентов, по мощности
не сильно уступающих серверу. Стали появляться клиентские скрипты
и целые апплеты. Клиент опять стал толстым. Опять нужна стандартизация
для общения теперь уже с сервером приложений. Появляется XML, SOAP,
web-сервисы и т.д. На MUMPS ты опять же можешь написать парсинг
SOAP, выборку данных из индексированных массивов и сгенерить SOAP-ответ.

Так что эволюция идет зигзагами. Тут сложно сказать, что было после кого:
клиент-сервер или файл-сервер. А вот MUMPS - это как гидра. Технологии
более 30 лет, а у нее постоянно новые головы отрастают.

Важно знать, что это не объектная база. Объекты там тоже
эмулируются, как и SQL. Ее называют постреляционной.
Я бы назвал недореляционной.
Post by Dmitry N.Ananyev
Как выяснилось, добавление обьектной базы дает выигрышь не только в логике
(чем обычно пренебрегают при разработке умных программ), но и в
производительности (а вот это уже не шутка).
Не совсем так. Добавление такой базы дает выигрыш в логике. У тебя
появляется больше вариантов для решения задачи. Если ты сможешь
выбрать наиболее оптимальный вариант, то получишь выигрыш в скорости.
У тебя есть возможность использовать эмулятор SQL и не париться с ручным
программированием. Выигрыша в скорости скорее всего не получишь. Потом
отдельные критичные части системы оптимизировать вручную и получить на
них выигрыш в скорости. Какие-то куски можно сделать на объектах. Тогда
совсем минимум программирования и минимум производительности.
Post by Dmitry N.Ananyev
Из вспомогательных вопросов, чтобы уж уточнить общий концепт-топологии,
осталось понять - если все клиенты - это миллион интернет клиентов (в
сумме
дающих 100 транзакций/сек) - то на этих 6-ти серверах с прикладными SQL
эмуляторами должно быть 6 web-серверов или все клиенты обращаются на 1
web-сервер, а на тех 6 нет никаких web-серверов ?
Для того, чтобы знать, сколько каких серверов ставить, надо смотреть,
что они будут делать. Если web-сервера обрабатывают много статичного
контента (например картинки), то у них много работы и их надо много.
Как уже говорилось, Cache сама себе сервер приложений и web-сервер.
Там принцип похож на ASP и JSP. Только называется CSP
(Cache Server Pages). Соответственно, если web-сервер видит
что-то вроде http://mysite/myapp/form.csp?myparam=value, то все это
дело передается в Cache через ISAPI и уже она занимается, дальнейшей
работой. Причем IIS и сама Cache могут стоять на разных машинах.
Так ISAPI-фильтр у нее конфигурировать можно.
Соответственно, http://mysite/myapp1/ может обслуживать одна Cache,
а http://mysite/myapp2/ может обслуживать другая. То есть сам web-
сервер вообще процессор не напрягает. Он только запросы туда
сюда гоняет, если кроме .CSP никаких страниц не обрабатывает.
Тут уже надо трафик смотреть. Если сам трафик маленький, а запросы
сложные, то можно и один web-сервер на кучу серверов приложений.
Если наоборот, то весь трафик через один web-сервер может загнуться.
В то-же время в технологии ASP web-сервер сам скрипты исполняет
и является сервером приложений. Там их нужно много в любом случае.

Посмотрим, как автоматически раскидывать клиентов. Клиент приходит
на один общий web-сервер www.company.com. Говорит "логин".
Там скрипт выясняет, какие из web-серверов меньше всего загружены,
и перенаправляет его на www1.company.com или www2.company.com и т.д.,
которые уже и занимаются дальнейшей работой с этим клиентом.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73
Dmitry N.Ananyev
2005-07-14 19:43:08 UTC
Permalink
Понял-понял-понял
что такое Caсhe.

Секрет в слове MUMPS - Massachusetts general hospital Utility Multi
Programming System.

Похоже это не пост РБД, и не ООБД, и не до-РБД.

Caсhe это такой тазик для данных, куда данные от сотен датчиков с
больного и от аппаратуры заливаются мощными потокоми, и, что принципиально,
с такой же огромной скоростью эти данные могут забираться серверами
приложений.
Caсhe де-факто исходно был задуман как система реагирования и
диагностирования по массивам
постоянно меняющихся данных.
Система поддержки врачей.
Расчет траектории их действий.

Данные льются потоком - водопадом, пишутся без особых всяких timestampov,
GUID-ов, разных индексов,
типовых для БД. А зачем они нужны? Лишние операции = потеря времени.


Адепты БД в ужасе - там нет репликации! Как же будут менеджеры разбираться
кто первый цену поставил?! Там плохая секретность данных!
А репликаций и всяких сложных конфликтов записей там вообще особо в задумке
не предполагалось.

2 разных пациента в обмороке не могут между собой законфликтоваться при
записи показаний - для Cache это видимо логический нонсенс.

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

Cache - это не особо СУБД, а система заточенная А) на запись данных Б) на
реагирование, В) на скорость этого реагирования.

При этом само реагирование определяется не триггером insert, delete,
update в одной талице, а на обработке в серверах приложений,
интерполяции, экстраполяции,
строятся линейные или квадратичные какие-нибудь зависимости и в итоге
по-сути в реальном времени
определяется и отслеживается многомерный вектор динамики развития и
идет команда реагирования по этому вектору.

У кого нет водопада данных и скорость не критична тот теоретически может
свои даже объектные задачи
реализовать на обьектных примочках (вроде якобы .Net внутри обещаемого
MSSQL) правда я это не видел и сегодня, а Cache похоже пашет уже давно.


Ну а где его взять-то Cache5 web-license enterprice для эксперимента?
Сделать кассовый аппарат нового типа - миллионы web-клиентов пробивают чек
на PC?
Dmitry V. Liseev
2005-07-15 15:35:58 UTC
Permalink
"Dmitry N.Ananyev" <***@relcom.ru> wrote in message news:db6f81$2ciu$***@ddt.demos.su...

Hi!
Post by Dmitry N.Ananyev
Адепты БД в ужасе - там нет репликации!
Там есть репликация. Просто в большинстве случаев она там
не нужна. Используется в основном для on-line резервирования
данных. Если основной сервер данных рухнет, все сервера
приложений можно будет подключить к резервному серверу данных,
не ожидая сутки, пока админ со стримера будет 200Гб восстанавливать.
Post by Dmitry N.Ananyev
Как же будут менеджеры разбираться кто первый цену поставил?!
Менеджер пускает транзакцию и лочит данные которые
менять собирается. Остальные менеджеры ждут. Когда
транзакция фиксируется (или откатывается), локи снимаются
и другие менеджеры лезут менять данные. Это чистый
блокировочник. Пишешь триггер на UPDATE, который
тебе время изменения и фамилию менеджера в таблицу
прописывает и все во всем разобрались.
Post by Dmitry N.Ananyev
Там плохая секретность данных!
Так тебе шашечки или ехать? Ты сабж перечитай.
У меня собственная система защиты написана, поскольку
мне это важно. На _каждую_ строку _каждой_ таблицы списки
прав доступа для пользователей и групп назначаются. Слабо на
эхотаге реализовать?
Post by Dmitry N.Ananyev
А репликаций и всяких сложных конфликтов записей там
вообще особо в задумке не предполагалось.
Что такое "сложный конфликт записей"? Не используй
репликацию для того, для чего она не предназначена,
и никаких конфликтов не будет.
Post by Dmitry N.Ananyev
Ну а где его взять-то Cache5 web-license enterprice для эксперимента?
1. Идешь на http://groups.yahoo.com/group/cache_ru/
Это список рассылки. Там тусуются разработчики,
пользователи, реселлеры и т.д. Там тебе все расскажут
и покажут и кучу примеров дадут.

2. Качаешь бесплатную однопользовательскую версию
с сайта www.intersystems.ru и пробуешь сделать на ней
некоторые наиболее важные куски твоей задачи.

3. Звонишь в InterSystems и договариваешься об экспериментах,
пилотных проектах и т.д., обещая потом купить. Тебе дают
боевую версию, временную лицензию какую хочешь, консультируют,
помогают, лишь бы у тебя все заработало и ты купил у них.
Post by Dmitry N.Ananyev
Сделать кассовый аппарат нового типа - миллионы web-клиентов
пробивают чек на PC?
Поисковый каталог на 30 языках:
http://www.mavicanet.com/

Сайт радиостанции: http://radio3.ru/

Чат: http://chat.vulcan.ru/

Вот кассовых аппаратов пока не видел.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73
Dmitry N.Ananyev
2005-07-16 21:45:48 UTC
Permalink
Post by Dmitry V. Liseev
На _каждую_ строку _каждой_ таблицы списки
прав доступа для пользователей и групп назначаются.


Как я понял есть 1 сервер базы данных с глобалами + 6 серверов приложений с
их обработкой.
Защита и критичная бизнес-логика на запись в глобалы (то бишь в таблицы) по
идее должны быть реализованы вот на этом 1-ом сервере базы (видимо в
триггере update что-ли), и если бизнес-логика вшита в триггер/метод, то
вычисления то по этой ее логике делаются на 1-ом компе базы и как же
нагружаются сервера приложений?

Сервер приложений дает команду - выполнить бизнес логику! - а где она? в
виде метода обьекта в базе - эти методы они что - динамически заползают с
базы
в сервера приложений и выполняются на них что-ли?
То есть логика в методах обьекта, а обьекты лежат в базе, нагружается же тот
комп откуда запустили эти методы, то есть как-бы в приложение копируется
обьект с методами и логикой из базы, запускает метод, нагружает комп
приложения, а данные пишет в глобалы базы?


Немножко похоже на Access с прилинкованным mdb файлом базы :)
На этой штуке диспетчерские в аэропорту что-ли делают?
Loading...