Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
 Re: Интересно подискусировать с профессионалами  [new]
mzprog
Guest
Gluk
Да кто Вам сказал, что этот подход не эффективен ??? Сервер БД сам решает каким образом выполнять запрос. Как правило, планы которые он строит достаточно эффективны и не Вам с ними соревноваться. Больше читайте прежде чем нести ахинею.


итак смотрим что для
SELECT TOP 100 * FROM MyTable
WHERE id NOT IN (SELECT TOP 100 id FROM MyTable ORDER BY id) ORDER BY id

нарешал оптимизатор Microsoft:

select - top - merge join right - 1,2 // разбивается на две ветки...
1 - top - order.rk+order
2 - order.rk+order

это что оптимальный подход для этой задачи?

В чём заключается ахинея? Просто все реляционные СУБД построены на базе реляционной алгебры... Эффективна ли она в некоторый подходах...

Рассмотрим select...

select * from T1

на C++ выглядело бы так:

for (int i = 0; i < T1.Count; i++)
{
... = T1;
}

select T1.id from T1,T2 where T1.id = T2.id

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}

а если теперь нам нужно выбрать только по чётные id? в С++ я бы написал так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id && i % 2 == 0) ... = T1.id;
}

интересно, как в SQL?
10 фев 04, 09:46    [528324]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
f_w_p
Member

Откуда:
Сообщений: 1603
to mzprog.
М.б. я чего-либо недопонял, но СУБД у вас нет. Переубедите меня, ответив на следующие вопросы:
1. Многопользовательский доступ к данным.
2. Наличие транзакций
3. Обеспечение безопасности данных.
4. Обеспечение надежности (архивирование, зеркалирование и т.д.)
5. Наличие средств администрирования БД.
6. Далее. Приведенный пример:
for (int i = 100; i < 200; i++)
{
// берём данные по строчкам из MyTable
}

просто не имеет смысла. Потому что данные в БД а) не упорядочены; б)количество нужных записей обычно заранее не известно.
Жду ваших убедительных возражений!
10 фев 04, 09:51    [528331]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
A.A.S.
Guest
автор
select T1.id from T1,T2 where T1.id = T2.id

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}


Думаю, даже на C++ это выглядело бы не так. Не делать T1.Count*T2.Count сравнений должны учить еще в школе. А сортировать пузырьком будете?
10 фев 04, 10:00    [528347]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
alex_k
Member

Откуда: krasnoyarsk
Сообщений: 6694
а что, в mssql нельзя пропустить несколько строк в упорядоченном запросе?
странно... все у них не как у людей :-)


а по поводу шедеврального

select T1.id from T1,T2 where T1.id = T2.id

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}


ну это анекдот :-)
10 фев 04, 10:06    [528419]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
2 mzprog
Вообще-то удивляет Ваше нежелание ознакомиться с предметом спора в который вы ввязались.

Е. Ф. Кодд
Будущие пользователи больших банков данных должны быть освобождены от необходимости знать организацию данных в машине (внутреннее представление). Нельзя считать удовлетворительной какую-либо службу, если она предоставляет такую информацию. Изменение внутреннего представления данных и даже изменение некоторых аспектов их внешнего представления не должны влиять на работу пользователей за их терминалами и на выполнение большинства прикладных программ. Изменения представления данных часто требуются по причине изменения потока запросов, операций обновления и отчетов, естественного увеличения числа типов хранимой информации.


Полный текст см Реляционная модель данных для больших совместно используемых банков данных

PS. Вообще-то это грустно. Да ладно. Скажите как будет происходить на C++
Примерно такое:
select T1.id from T1,T2 where T1.id = T2.id and T1.name like '%Панты%марала%'
10 фев 04, 10:14    [528462]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
автор
select T1.id from T1,T2 where T1.id = T2.id

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}

Вы уж меня извините еще раз, но теперь я начинаю сомневаться, что Вы профессионал C++ , так как пример приведен неудачно - достаточно в таблицах T1 и T2 иметь по 10 миллионов записей, чтобы из Вашего алгоритма, который могут предложить только студенты 1-го курса получился самый большой в мире тормоз.

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

P.S. Кстати я могу посоветовать Вам насчет СУБД - не пытайтесь применить ООП на РСУБД, начните изучать SQL с "чистого" листа. Забудьте про классы, обьекты, алгоритмические подходы и позаписную обработку данных, мыслите множествами, учитесь абстрагировать обработку множества данных от методов их обработки. Через это прошли почти все присутствующие в этом форуме. Мне тоже в свое время в 95 году было нелегко менять свою парадигму мышления с FoxPro и Delphi на SQL. Как ни странно, но помог именно MS Access, который в мягкой, не навязчивой форме приучает программиста мыслить релляционно и получать данные через запросы при построение форм и отчетов.
10 фев 04, 10:25    [528484]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
mzprog
Guest
A.A.S.
select T1.id from T1,T2 where T1.id = T2.id

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}

Думаю, даже на C++ это выглядело бы не так. Не делать T1.Count*T2.Count сравнений должны учить еще в школе. А сортировать пузырьком будете?

Кто это такое выдумал, в C++ можно делать всё что угодно!!!
Можно даже
while (1){ ... } :)
А сортировать в условии задачи и не требовалось вовсе...

alex_k

а по поводу шедеврального
select T1.id from T1,T2 where T1.id = T2.id

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}
ну это анекдот :-)


В чём анекдот заключается???

f_w_p

М.б. я чего-либо недопонял, но СУБД у вас нет. Переубедите меня, ответив на следующие вопросы:
1. Многопользовательский доступ к данным.
2. Наличие транзакций
3. Обеспечение безопасности данных.
4. Обеспечение надежности (архивирование, зеркалирование и т.д.)
5. Наличие средств администрирования БД.
6. Далее. Приведенный пример:
for (int i = 100; i < 200; i++)
{
// берём данные по строчкам из MyTable
}
просто не имеет смысла. Потому что данные в БД а) не упорядочены; б)количество нужных записей обычно заранее не известно.
Жду ваших убедительных возражений!


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

Наличие транзакций присутствует лишь в зачаточном виде...

Обеспечение безопасности данных и Обеспечение надежности архивирование, зеркалирование ) - нет

Наличие средств администрирования БД - администратором является программист, который пишет данный сервер...

а пример переделаем на:
for (int i = 100; i < 200 && i < T1.Count; i++)
{
// берём данные по строчкам из MyTable
}

Ermak
Вообще-то это грустно. Да ладно. Скажите как будет происходить на C++ Примерно такое:
select T1.id from T1,T2 where T1.id = T2.id and T1.name like '%Панты%марала%'

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id T1.Like(T1.name, "%Панты%марала%")) ... = T1.id;
}

где функцию Like с параметрами (<имя поля>, <строка like>) необходимо ещё реализовать...

Также можно будет реализовать функцию Select, которая будет работать также как и обычный select

Сразу хотел бы сказать, что моя программулька VpDbServ (сайт: )mzc.narod.ru) конечно же, на порядки уступает всем имеющимся СУБД - это скорее недоделанный пример...от которого, впрочем, вы можете написать свой простейший сервер баз данных ...

В будующем, возможно, я допишу классы CMzDbServer и CMzDbClient таким образом, чтобы имитировать работу SQL-операций select, insert, update, delete, create и drop... Всё-таки, к моим попыткам сломать мировозрение и предложить другой подход терпит крах... наверное, я не прав...

Просьба, относиться к моим потугам (которые со стороны выглядят, возможно, нелепо) не так серьёзно...
10 фев 04, 11:12    [528619]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
mzprog
Guest
ASCRUS

select T1.id from T1,T2 where T1.id = T2.id

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}

Вы уж меня извините еще раз, но теперь я начинаю сомневаться, что Вы профессионал C++ , так как пример приведен неудачно - достаточно в таблицах T1 и T2 иметь по 10 миллионов записей, чтобы из Вашего алгоритма, который могут предложить только студенты 1-го курса получился самый большой в мире тормоз.

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

Я не говорил, что я профессионал в С++ (например, я до сих пор, к сожалению, не применяю шаблоны :( ).
В этом случае, конечно, искать нужно методом деления на 2...
подумаю, как лучше сделать...
10 фев 04, 11:24    [528661]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
mzprog
Всё-таки, к моим попыткам сломать мировозрение и предложить другой подход терпит крах... наверное, я не прав...

Дело в том что те, к кому Вы тут обращаетесь, в своё время уже ломали своё мировоззрение при переходе от процедурных языков(типа Си и Паскаля) к SQL, а Вы еще нет :)
10 фев 04, 11:29    [528675]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
2mzprog

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id T1.Like(T1.name, "%Панты%марала%")) ... = T1.id;
}

а сколько раз вызовется T1.Like? T1.Count*T2.Count раз?
По моему было бы быстрее

for i := 0 to T1.Count -1 do
if T1.Like(T1.name, "%Панты%марала%") then
T2.Seek(ID,T1.ID);

А если добавить еще такой же Like по T2? Тогда составить 2 временных списка (по T1 и T2), сортировать их и методом слияния(или лучше использовать хэш?(а памяти хватит?) или просто циклами пройти? (а диск быстрый?) а что быстрее: сортировка и слияние или хэш-таблицы? А как определить?) найти нужные строки.
А если....(еще 1000 и один случай).
А если учесть, что не все данные в памяти, и надо принять во внимание время извлечения данных с диска? А что быстрее? Применить сложный процессороемкий алгоритм и нагрузить камень, или применить тупой алгоритм и нагрузить диск - что быстрее? А если есть индексы (ведь они есть?) какой выбрать? А какой уже загружен в память? А может быстрее использовать его, чем сначала это индекс выгрузить, затем загрузить нужный...?
Одним словом - агрооомное поле для деятельности - оптимизаторы всегда были штуками хитрыми. Недаром для их разработки привлекали много-много хороших математиков.
10 фев 04, 11:50    [528748]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
f_w_p
Member

Откуда:
Сообщений: 1603
В том простейшем примере, который приведён на сайте mzc.narod.ru возможен многопользовательский доступ к данным... к сожалению, пока только в таком режиме: каждое клиентское приложение должно находиться на разных компьютерах (для каждого клиента необходимо установить уникальный порт). Кстати, для этого надо исправить исходник...
"Размножение" портов не есть хорошо. Или вы хотите, чтобы у системного администратора крышу сорвало:-))

Наличие транзакций присутствует лишь в зачаточном виде...
Отож. Отсутствие нормальных транзакций в MySQL перечеркивает все его остальные достоинства.

Наличие средств администрирования БД - администратором является программист, который пишет данный сервер...
Вы что ж, предлагаете для простого изменения структуры даннных писать код?!

а пример переделаем на:
for (int i = 100; i < 200 && i < T1.Count; i++)
{
// берём данные по строчкам из MyTable
}

Все равно не проходит. Потому что данные в БД не упорядочены.
10 фев 04, 12:33    [528840]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Ну блин, если делать ВООБЩЕ нечего, хоть бы что-нибудь вроде такого в свои классы добавили:

T2.Connect("DSN=DATA_SOURCE");
T1.Connect("DSN=DATA_SOURCE");

T2.DefineUsingSql("Select * from DBO.USERS);
T1.DefineUsingSql("Select * from DBO.GROUPS);

T3.LazyLoad(true); // если false - реляционные операции будут выполняться с рекордсетами непосредственно на клиенте, а в противном случае - они запоминаются для запроса.

T3 = (T1*T2).Select(T1,id,T2,id,GCV_EQUALS).Projection(T1,id,T2,name).Select(T2,name,std::string("%Панты%марала%"),GCV_LIKE) - (T1*T2).Select(T1,id,T2,id,GCV_EQUALS).Projection(T1,id,T1,name).Select(T1,name,std::string("%Панты%марала%"),GCV_LIKE);

T3.Connect("DSN=DATA_SOURCE");
T3.Parse();
T3.Load();

controlDataGrid.Attach(T3)

Тоже бред, конечно....

Но так прикольнее.... И вроде, алгебра, опять же - реляционная. Прям как фокспро будет, но на C++. Только работать будет в 10000 раз медленнее.

А лучше - PHP + SQL и вперёд!
10 фев 04, 16:25    [529482]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
Alexander_Chepack
Member

Откуда: London
Сообщений: 22649

на C++ выглядело бы так:

for (int j = 0; j < T2.Count; j++)
for (int i = 0; i < T1.Count; i++)
{
if (T1.id == T2[j].id) ... = T1.id;
}


Т.е. Вы утверждаете, что самый обычный и тупой table scan (а именно его Вы тут реализуете) - это самый оптимальный способ обработки этого запроса??? Ну ради бога - почитайте Вы хоть что-нибудь по базам данных !!!
10 фев 04, 20:02    [529862]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
Alexander_Chepack
Member

Откуда: London
Сообщений: 22649
Неуверен, что в тему - у меня как-то наш сетевой администратор (routers всякие и прочее) как-то полушутя спросил за рюмкой пива: "Слушай - а что там такого сложного в этих ваших базах данных? Ну открыл файл и нашел нужные данные - это ж примерно как поиск в Notepad?"

Я, если честно, просто растерялся ... до сих пор ломаю голову, как бы в трех словах, но внятно, ответить на этот вопрос.
10 фев 04, 20:10    [529869]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145754
Alexander_Chepack
В трех словах не получается.
А как в нотепаде суммировать?
10 фев 04, 22:08    [529939]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
mzprog
Guest
В словесной дуэле я проиграл - сдаюсь ....
Давайте перейдём теперь от слов к делу...
Поставим задачу и проверим что быстрее работает, например MS SQL или
классы из MzDbNet...
Надо поставить такую задачу, чтобы напрячь сервера по полной программе...

Пусть, для простоты у нас будет 1 таблица...

Представим, что где-то в пространстве
движется электрон и к нашему компьтеру подключен
датчик, определяющий скорость электрона ...
Сталкиваясь с другими электронами, наш электрон
то теряет, то набирает скорость...
Для чистоты эксперимента нам необходимо снимать
данные с частотой 1 МГц (то есть каждую микросекунду)
Эксперимент будем проводить с течении 100 секунд...
Программа должна быть написана следующим образом:
сняли значение с датчика, поместили значение в базу и т.д.
Конечно, датчика такого не существует, возмём любое случайное
значение от 0 до 1 миллиона... Такую частоту (1МГц) выставить
на компьютере также не реально, поэтому запись будем производить
в обычном цикле, а скорость будем измерять либо по кол-ву записей
сохранённых за 100 секунд, либо по записи 100 миллионов записи в базу

Также проверим работу выборки 10 значений, начиная с заданной
микросекунды...Например, построим график...

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

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

Клиент должен быть написан на Borland C++ Builder, и связываться (в случае
с MS SQL) по любому протоколу, например через ODBC...

Ну что скажете???
11 фев 04, 08:54    [530105]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
Quark
Member

Откуда: Екат
Сообщений: 1099
>> поставить такую задачу, чтобы напрячь сервера по полной программе
А вот для данной задачи
молодой человек есть СУБД реального времени.
11 фев 04, 09:04    [530118]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
Рыжий Кот
Member

Откуда: Мягкий Диван; [забанен] Рустамом; [разбанен] П02;
Сообщений: 21678
После ПТ и Теста, это мой самый любимый топик

Для работы с одной таблицей я возьму mysql и уделаю MzDbNet по всем статьям. Может еще сравним скорость работы с плавающей запятой в Delphi и
С++ Builder? Ты будешь приятно удивлен, узнав, что дельфин в 3 (!) раза быстрее... Ну и что?
Хорош электроны считать, делом займись...

Картинка с другого сайта.
11 фев 04, 09:05    [530119]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
eNose
Member

Откуда:
Сообщений: 183063
Такого бреда давно не было...
Ну ничего, щас попробую представить, какбы это сделать.

Во первых, никакого MS SQL. Возьмем другую СУБД, более быструю на запись и (с учетом "Клиент должен быть написан на Borland C++ Builder") с возможностью прямого доступа к API СУБД. А еще лучше - нативную, написанную на том же билдере (или портировнную). Например, TinyDB.
Хотя нет, есть ведь in-memory databases!
Нам нужна одна таблица (по условию), возьмем kbmMemTable (та же СУБД, только в памяти и сильно ограничена по возможностям - но транзакции и прочие прелести присутствуют).
Переодически (в отдельном треде) будем скидывать данные на диск (в режиме append) и очищать таблицу в памяти.

Imho, работать на запись будет очень быстро. Как минимум, ничуть не медленнее твоих классов.
На выборку - гораздо быстрее.



eNose
11 фев 04, 09:16    [530129]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
mzprog
Guest
Как я понимаю, за MS SQL никто и впрягся?

Quark
А вот для данной задачи
молодой человек есть СУБД реального времени.


Кто сказал, что у меня не СУБД реального времени???

Рыжий Кот
Для работы с одной таблицей я возьму mysql и уделаю MzDbNet по всем статьям.


Я согласен к с тобой посоревноваться... Пусть я проиграю, зато не на словах, а на деле...

MySQL AB - компания, в состав которой входят основатели MySQL и основные разработчики. MySQL AB создана в Швеции Дэвидом Аксмарком (David Axmark), Аланом Ларссом (Allan Larsson) и Майклом Монти Видениусом (Michael Monty Widenius).

Кстати, я патриот. Какой-то заморский продукт нам не указ... Ну если победит,
тогда, конечно, я с удовольствием признаю победу!!!

Рыжий Кот
Хорош электроны считать, делом займись...

Ты мне штоли заплатишь?

eNose
Такого бреда давно не было...
Ну ничего, щас попробую представить, какбы это сделать.

Во первых, никакого MS SQL. Возьмем другую СУБД, более быструю на запись и (с учетом "Клиент должен быть написан на Borland C++ Builder") с возможностью прямого доступа к API СУБД. А еще лучше - нативную, написанную на том же билдере (или портировнную). Например, TinyDB.
Хотя нет, есть ведь in-memory databases!
Нам нужна одна таблица (по условию), возьмем kbmMemTable (та же СУБД, только в памяти и сильно ограничена по возможностям - но транзакции и прочие прелести присутствуют).
Переодически (в отдельном треде) будем скидывать данные на диск (в режиме append) и очищать таблицу в памяти.

Imho, работать на запись будет очень быстро. Как минимум, ничуть не медленнее твоих классов.
На выборку - гораздо быстрее.


Я до этого только и слышал, что реляционные базы это круто! Как дело дошло
до конкретной задачи - пас.... сразу использовать ОЗУ!!! :)

На счёт TinyDB - это что за хрень такая??? первая ссылка при поиске в yandex.ru на TinyDB - где взять вломщик для него...

eNose
Такого бреда давно не было...

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

Ну что, MySQL против MzDbNet?
11 фев 04, 11:33    [530437]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
fedd
Member

Откуда: Москва
Сообщений: 33999
мне - лень, но хочу помочь человеку встать на истинный путь.

все эмпирически.

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

на вставку данных традиционная база данных по скорости проиграет.

> Также проверим работу выборки 10 значений, начиная с заданной
микросекунды...Например, построим график...

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

а теперь где выиграет:

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

в общем, везде, где мы будем смотреть не только на то, когда вставлена запись (поскольку в файле отсортирровано естественным образом по времени вставки), а и на значение.

это достигается благодаря тому, что запись в традиционной базе данных, грубо говоря, вставлялась бы не в один, а в несколько "файлов", в каждом их которых была бы отсортирована по другому полю (в данном случае - по значению скорости электрона).
11 фев 04, 12:06    [530572]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
qu-qu
Member

Откуда:
Сообщений: 9630
А мне предложение mzprog-а "посоревноваться" напомнило достаточно ярко-выписанную сюжетную линию из StarWars-I о гонках на Татуине...
Где всякого рода авантюристы цепляют небольшие "кокпиты", собранные из всякого хлама, к аграмаднейшим спаренным звездолетным движкам, называют всю эту тряхомудию гордым и емким словом "кар" и носятся на этих гробах по планете "на бреющем" до тех пор пока все не убьются насмерть, если, конечно, какой-нить из них в виде гуманоидного мальчика не обладает вдруг врожденными задатками будующего джедая (или Дарта Вейдера, если угодно).
Тогда убиваются не все, а даже остается "победитель"... :-))
11 фев 04, 12:34    [530653]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
f_w_p
Member

Откуда:
Сообщений: 1603
Надо поставить такую задачу, чтобы напрячь сервера по полной программе...
Пусть, для простоты у нас будет 1 таблица...

Вы даете нереальные планы. Это волюнтаризм! (С) "Кавказская пленница"
Дело в том, что ОДНА таблица - это не БД. Это массив! А в вашем случае даже одномерный.

Кто сказал, что у меня не СУБД реального времени???
Я! По-моему уже доказано, что у вас вообще нет СУБД. Тем более РВ.

А решение подобной задачи дал eNose. Один поток пишет в массив, а другой выбирает данные из массива в СУБД.
11 фев 04, 12:36    [530659]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
2 mzprog
А чё такие примитивные задачки то? Может чё посложней попробуем? Например Уверен что тут на С++ мы не дождёмся ответа (пишем естественно втупую, не анализируя условий - они же могут поменяться).

И я кстати так и не увидел решения на С++ своей задачи с двумя таблицами :)

Что касается скорости. Конечно скорость работы СУБД (особенно для одной таблицы с парой полей) будет гораздо ниже. Но скорость разработки приложения - выше. Такую же аналогию можно провести между Си и ассемблером.
И вобще - никто не писал что MS SQL - это всегда круче. Для каких-то задач СУБД ну совсем не нужно. Задача с электроном - из этого числа. Из за одной таблицы использовать сервер не стоит. Но если таблиц несколько, если в одну таблицу пишет несколько пользователей?
Допустим есть справочник жителей города. Есть улицы, дома, квартиры, сами жители. И иногда надо искать жителей по каким-то критериям. Может есть это сделать на MzDbNet и будет быстрее - но сделать это будет неимоверно сложнее. А пока идёт разработка компьютеры тоже развиваются.
11 фев 04, 13:00    [530736]     Ответить | Цитировать Сообщить модератору
 Re: Интересно подискусировать с профессионалами  [new]
ody
Member

Откуда:
Сообщений: 1
Хочу тебя немного огорчить - такая СУБД уже существует более десяти лет. Называеться она Velocis. Она построена на принципе клиент/сервер с набором API клиента (нехилым уже), которое позволяет работать с сервером по принципу атомарных действий - d_recnext,d_recfirst, d_pfindfrst и т.д. К этому всему добавлен механизм написания хранимых процедур в виде процедур в DLL. Библиотека прописываеться на серваке и вуаля через RPC клиента вызываем хранимые процедуры и функции. И все на родном с++ или еще на чем (не важно). Работает очень быстро. Очень... Есть даже поддержка SQL - но SQL там не родной для СУБД - это просто для универсальности добавлено и работает по моему не ахти как быстро. И реализовано все через тот же RPC Velocis. Кого заинтересовала данное СУБД - http://www.raima.com/ - пробуйте что нить добится у буржуев. Но идея тама в следующем - вы регистрируетесь. и америкосы пересылают ваши данные в Питерским дилерам, дальше незнаю. У меня была лицензионная версия 2. а их уже по моему 6. И не надо велик изобретать - лучше вы не сделаете (по крайней мере в ближайшие лет десять :))
11 фев 04, 13:14    [530770]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить