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

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

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

Ответить
bash77
незнакомец
Сообщения: 3
Зарегистрирован: 25.07.2007 16:27:21

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

Сообщение bash77 »

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

Код: Выделить всё

# 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 ?
спасиб.
Аватара пользователя
STAKANOV
энтузиаст
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV »

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

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

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

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

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

Сообщение bash77 »

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

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

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

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

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


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

Сообщение debi12345 »

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

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

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

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

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

Оба варианта позволяют, когда будет нужно, записать в БД сделанные изменения.
GrayEddy
постоялец
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Сообщение GrayEddy »

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

Сообщение bash77 »

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


2 GrayEddy - заинтересовало !
ткни носом плиз где почитать
Аватара пользователя
STAKANOV
энтузиаст
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV »

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:
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Еще вариант - использовать SQLite, указав вместо файла базы ':memory:'. Правда понадобиться длл-ка, но зато SQL.
Ответить