таблица из базы данных в памяти

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

таблица из базы данных в памяти

Сообщение bash77 » 25.07.2007 16:36:30

здрасьте всем !
возникла необходимость написать демона для чата...
т.к. демон будет висеть постоянно - отпала необходимость ложить данные базу. В связи сэтим вопрос:
каким образом это организовать ?
вот описание таблицы из базы данных:
Код: Выделить всё
# id      -   идентификатор сообщения
# name      -   логин автора сообщения
# mess      -   текст сообщения
# status   -   статус сообщения
# room      -   комната из которой было послано сообщение
# time      -   время сообщения

на ум приходит только:
Код: Выделить всё
type
baza = record
  id : integer;
  name : string;
  mess : string;
  status : string;
  room : string;
  time : string;
end;
var
  gs : array [1..1000] of baza;

как ввод сообщений сюда делается ?.. и вывод)
и поиск по id ?
спасиб.
bash77
незнакомец
 
Сообщения: 3
Зарегистрирован: 25.07.2007 16:27:21

Сообщение STAKANOV » 25.07.2007 18:20:43

bash77 писал(а):как ввод сообщений сюда делается ?.. и вывод)

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

bash77 писал(а):и поиск по id ?

поже необходимость "ложить данные базу" не пропала :wink:

ЗЫ. по-моему эта тема больше подходит для раздела "проекты", потому как это вопрос больше об алгоритме
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение bash77 » 25.07.2007 18:42:26

STAKANOV писал(а):
bash77 писал(а):как ввод сообщений сюда делается ?.. и вывод)

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

bash77 писал(а):и поиск по id ?

поже необходимость "ложить данные базу" не пропала :wink:

ЗЫ. по-моему эта тема больше подходит для раздела "проекты", потому как это вопрос больше об алгоритме


в том-то и дело, алгоритм я знаю... как это реализовать ?... в паскале я хоть и не новичек, но с типами данных запись и массив ниразу не сталкивался плотно ((
bash77
незнакомец
 
Сообщения: 3
Зарегистрирован: 25.07.2007 16:27:21

Сообщение debi12345 » 25.07.2007 19:20:10

каким образом это организовать ?
вот описание таблицы из базы данных:

Не пойму, почему наследники TBufDataSet Вам не приглянулись - в них есть весь необходимый сервис.

Два варианта навскидку :

1) использовать запрос, основанный на наследовании от обычного TBufDataset, тот же TSQLQuery - он после первичной выборки позвляет делать изменения в памяти, и рассылает подписавшимся события об изменении данных;

2) использовать TMSESQLQuery из состава MSEgui - расширенный вариант оного, после выборки можно отключиться от БД и работать в оффлайновом режиме, записаться в локальный файл, назначить и использовать локальные индексы, хранить фотографии и музыку.
Также может создаваться и заполняться даными вообще без самой БД - так называемый локальный ( in-memory-only ) режим.

Оба варианта позволяют, когда будет нужно, записать в БД сделанные изменения.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение GrayEddy » 25.07.2007 19:22:04

Данные лучше всего хранить в кольцевом списке (обычный двунаправленный список, начало и конец которого замкнуты).
Поиск по ID можно сделать перебором по списку. 1000 записей в памяти - это будет быстро.
Есть специализированные сайты по алгоритмам. И примеры на псевдокоде.
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Сообщение bash77 » 25.07.2007 19:39:19

GrayEddy писал(а):Данные лучше всего хранить в кольцевом списке (обычный двунаправленный список, начало и конец которого замкнуты).
Поиск по ID можно сделать перебором по списку. 1000 записей в памяти - это будет быстро.
Есть специализированные сайты по алгоритмам. И примеры на псевдокоде.


2 GrayEddy - заинтересовало !
ткни носом плиз где почитать
bash77
незнакомец
 
Сообщения: 3
Зарегистрирован: 25.07.2007 16:27:21

Сообщение STAKANOV » 25.07.2007 22:08:29

bash77 писал(а):2 GrayEddy - заинтересовало !

ткни носом плиз где почитать


http://www.codenet.ru/progr/other/lpas5.php
http://www.codenet.ru/progr/other/lpas6.php
http://zeus.sai.msu.ru:7000/programming/bp70_ug/bp70ug_08.shtml

прим.: правда там, по-моему, нет описания двунаправленного списка, но главное понять сам принцып и тогда можно хоть древовидную структуру создать :D

ЗЫ. офтопично ... интересно, какие тогда нынче новички ... :roll:
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение v-t-l » 25.07.2007 23:05:39

Еще вариант - использовать SQLite, указав вместо файла базы ':memory:'. Правда понадобиться длл-ка, но зато SQL.
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru