![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Посоветуйте тип баз данных [D6, Win2k, WinXP]
DelphiN! © (2005-02-11 12:48:00)Написал программу, на основе баз данных Paradox 7, Всего в программе 7 баз данных. 5 баз будут иметь средний размер по 500 кб. 1-а из баз в среднем может разрастись до 1-го гигабайта. Еще одна база может разрастись до нескольких гегабайт, также в эту базу довольно часто добавляеться новые значения методом Append компонента ClientDataSet(несколько раз в минуту). Программа ведет очень активную работу с маленькими базами(до 500кб). В среднем проводит циклический поиск(методом сравнения строк) в каждой из маленьких баз по 1-му разу в секунду. 2-е большие базы(до 2-х гигабайта) программа использует редко, и только добавляет туда новые значения, не производя поисков. Со всеми базами работаю через компонент TClientDataSet
Так вот когда одна из баз возрастает более чем на 1 мегабайт(в данную базу добавляються новые значения методом Append примерно каждые 30 секунд), программа начинает вылетать и виснуть ...
Что вы можете посоветовать, может Paradox не подходит для больших баз ? Что лучше использовать ? И что может подойти для маленьких, но очень часто используемых баз ?
Заранее благодарен.
Danilka (2005-02-15 13:20:00) [61][16] DelphiN! © (15.02.05 13:05)
Ох.
Во-первых, в различных СУБД есть свои средства для доступа к информации о текущих сеансах, пользователе и пользователях.
Во-вторых, об индексах ничего не слышал, разумеется?
Советую для начала книгу почитать по СУБД, прежде чем огороды городить.
Неплохая, прямо для тебя, лежит вот-здесь:
http://www.podgoretsky.com/classics.html
Там есть книга в формате Ворда и ПДФ: "Понимание SQL, Лебедева В.Н., Мартин Грубер".
Затем, когда почитаешь ее, хотя-бы несколько глав, уже можно попытаться представить задачу, и подбирать под нее сервер СУБД.
Digitman (2005-02-15 13:16:00) [62]и как, кстати, насчет транзакций ?
в смысле - юзер, зарегистрированный в "таблице пользователей" некоей базы А, открывает "базу сеансов" В, делает в ней изменения (фиксирующие начало сеанса) и "отваливается" по причинам нечаянного выдергивания уборщицей ТетьГлашей шнурка из розетки ?
Digitman (2005-02-15 13:12:00) [63]и каков же тайный смысл "базы сеансов" ?
DelphiN! (2005-02-15 13:05:00) [64]А нет, ошибся в последней формулеровке (100 * 100). Она выглядит не так, потаму-что поиск проводиться примерно следующим образом :
i := 0;
b := false;
while (i <= BASA.RecordCount)and(not b) do
begin
Inc(i);
BASE.RecNo := i;
if LCmpStrI(PChar(Base.FieldByName('Field').AsString),PChar(Value))<>0 then
b := true;
end;
if b then
Result := Base.FieldByName('Field').AsString
else
Result := '';
end;
DelphiN! (2005-02-15 12:57:00) [65]
>
> [14] Digitman © (15.02.05 12:42)
Нет. Есть база текущих сеансов, в ней храниться время окончания сеанса. Есть таймер, с интервалом в 1-у секунду, при каждом срабатывании таймера перебирается вся таблица пользователей(сейчас 100 человек), и для каждого пользователя ищется его значение в базе сеансов(в базе сеансов может быть значений столько же, сколько и пользователей). Вот и получается, что поисков в базе сеансов = колличеству пользователей, в то время как колличество записей в базе сеансов при максимальной нагрузке = колличеству записей в табилце пользователей. Из этого получаем : колличество стравнений строк = колличество пользователей * на колличество сеансов(при максимальной нагрузке сейчас это 100 * 100)
Digitman (2005-02-15 12:42:00) [66]
> поиск проводиться .. около 400-т
> раз в секунду
"Абалдеть !"(с)
чуть ли не каждые 2-3 мс слать SELECT-запросы - врагу не пожелаешь результаты работы такого алгоритма ..
> обновление значений ListView по таймеру
это что ж получается - таймер у тебя сигналит с периодом в 2-3 мс, и по каждому сигналу ты делаешь очередной запрос к БД, а рез-ты запроса выводишь в TListView ? Из-за боязни, что юзер упустит какие-то изменения в БД, произошедшие за последние 2-3 мс ?
Так что ли ?
sniknik (2005-02-15 12:42:00) [67]> А в чем отличия MSSql и MySql ?
продукты разных производителей, с разным подходом, реализацией, способами хранения/форматами данных,интерфейсами (передача данных), пользовательскими интерфейсами служебных программ ... , разное практически все. обьеденяет только sql, и то в минимуме, только для того чтобы сказать поддержан стандарт t.sql/... (но самом деле и от стандарта отличия находили)
> Что лучше ?
а что лучше гоночный велосипед или горный? (для езды в пустыне... ;о)))
Sergey13 (2005-02-15 12:27:00) [68]2[11] DelphiN! © (15.02.05 12:23)
>А в чем отличия MSSql и MySql ? Что лучше ?
Разница во второй букве. "S" лучше, потому что она заглавная. 8-)
DelphiN! (2005-02-15 12:23:00) [69]А в чем отличия MSSql и MySql ? Что лучше ?
DelphiN! (2005-02-13 12:41:00) [70]Не посоветуете какуюнибудь документацию(для обучения). Использование MySQL в Delphi
DSKalugin (2005-02-12 14:00:00) [71]MySql - это СУБД (Система управления базами данных),
а Sql - это язык (Structured Query Language), который применяется в этих СУБД
MySql самая простая и быстрая по скорости чтения данных, основное применение нашла в WEB
полезно также ознакомиться с сайтом www.sql.ru
MySql - www.mysql.ru
DelphiN! (2005-02-12 13:12:00) [72]А чем отличается MySql от Sql ? Что лучше ?
DSKalugin (2005-02-11 18:20:00) [73]Paradox для решения сетевых задач явно не подходит. Тем более на таких объемах, да еще где скорость чтения / записи имеет роль.
Посмотри в сторону MySQL, Firebird. Это те, которые попроще
Anatoly Podgoretsky (2005-02-11 15:57:00) [74]В базе нет записей, поэтому ничего добавить нельзя.
Desdechado (2005-02-11 15:48:00) [75][3] - ответа на вопросы не наблюдаю.
Из пояснения понял только, что индексный поиск не используется. Надо использовать. Причем через SQL. Но 400 поисков в секунду - это серьезное ограничение. Чем оно вызвано? Есть ли смысл обновляться каждую секунду? Есть ли смысл обновлять все 400 или достаточно нескольких?
Sergey13 (2005-02-11 15:14:00) [76]2 [3] DelphiN! © (11.02.05 15:05)
>Что такое ФБ ?
FireBird - Сервер БД, клон InterBase. Текущая версия 1.5.2.
DelphiN! (2005-02-11 15:05:00) [77]
> 2. "по 1-му разу в секунду" - значит ли это, что поиск должен
> отрабатывать быстрее всегда, или это требование на среднее
> время поиска
Это обновление значений ListView по таймеру. Я описался поиск проводиться не раз в секунду, а около 400-т раз в секунду. В базе примерно 200 записей. Поиск проводиться сравнением строк.(Таймер поиска срабатывает 1 раз в секунду, но при одном срабатывании может производиться до 400-т поисков).
В большие базы более 1-го гигабайта нужно с переодичностью в 30 секунд добавлять по 1-му значению. При этом по запросам пользователя нужно производить фильтрацию и вывод данных в Грид.
Данные из базы данных в дальнейшем планируется передавать по сети.
Произвожу поиск методом сравнения строк, так как с базами работать умею плохо, и не знаю других методов.
Что такое ФБ ? Расшифруйте если не затруднит
Sergey13 (2005-02-11 13:22:00) [78]ИМХО, не паханое поле для улучшения. 8-)
1. База<>таблица.
2. "методом Append" если не нужно одновременное отображение вставленного, то лучше использовать отдельный запрос с параметром.
3.(методом сравнения строк) - это обязательно? Идентификаторы пошустрее будут наверное.
4.
> может Paradox не подходит для больших баз ?
Да уж не самый лучший выбор.
5.
>Что лучше использовать ? И что может подойти для маленьких, но очень часто используемых баз ?
ФБ например.
Desdechado (2005-02-11 13:05:00) [79]1. парадокс для таких объемов точно не предназначен
2. "по 1-му разу в секунду" - значит ли это, что поиск должен отрабатывать быстрее всегда, или это требование на среднее время поиска
3. ClientDataSet Напрямую не работает с парадоксом. Что используется в связке с ним?
4. Похоже, что "раз в 30 с добавление в таблицу" - это что-то реал-таймовое пишется, там очень строгие ограничения обычно. И всякие ширпотребовсие СУБД не подойдут.
Информации для того, чтобы рекомендовать что-то, маловато...