Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: CL | DM;

Вниз

Структура для хранения данных   Найти похожие ветки 

 
VladSel   (2008-01-21 08:02) [0]

Задача:
Хочу создать структуру (числа, даты строки, ...) для (хранения, добавления, изменения, сортировка, ...)

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

(правда пока с реальными размерами не определился, т.к. знаю что на данный момент - приблизительно 1 миллион

строк, в каждой из которых есть integer - 2-3 поля, string (~150 символов) - 2-3 поля, TDateTIme - 2-3 поля

(в сумме~500Мб)). Предполагаю что 80-85% работы будет заключаться в сортировке и поиске нужной строки.

Вопрос 1:
У кого Какие есть идеи по этой подобной структуре, что в ней использовать (массивы, списки).

Как варианты я хотел использовать:
1. динамические массивы, Плюсы: быстрый доступ к любому элементу; минусы: медленное изменение размеров

(например вставка в начало)
2. связные списки, плюсы: быстрые вставки, изменение последовательности строк,

Вопрос 2:
Если использовать динамические массивы всё понятно, объявил массив с нужным типом и сразу с ним работай, а

если использовать связные списки, то как я понимаю я имею в списке кучу указателей, а вот на что эти

указатели? создавать для каждой записи(строки) массив указателей для каждого типа данных (тока тогда для

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

занимает 4 байта) и быстродействие будет наверно низкое) или есть какие-то другие методы. Может кто-то уже

удачно делал что-то подобное.


 
Сергей М. ©   (2008-01-21 08:21) [1]

Самый верный в данных условиях Вариант 3 - использование СУБД


 
VladSel   (2008-01-21 09:41) [2]

В сторону СУБД смотреть не хочу, т.к. СУБД уже используется, я хочу брать данные с сервака по возможности меньшее количество раз (хочу уменьшить сетевой трафик), при проблемах с сетью хочу чтобы никакие данные не терялись, и данные на клиенте хочу где-то сохранить (не в DataSet-ах), а затем своими классами вытаскивать данные в том виде в котором они нужны. Массивы не хочется использовать т.к. одни и теже данные надо в нескольких местах показывать по разному (разная сортировка и разные фильтры), в списках как я предполагаю можно было бы создать для каждого случая свои связи при этом данные хранились бы всего один раз, только со списками мне не понятно где хранить сами данные и как их связать со списком.


 
Ega23 ©   (2008-01-21 09:48) [3]


> УБД уже используется, я хочу брать данные с сервака по возможности
> меньшее количество раз (хочу уменьшить сетевой трафик),
> при проблемах с сетью хочу чтобы никакие данные не терялись,
>  и данные на клиенте хочу где-то сохранить (не в DataSet-
> ах), а затем своими классами вытаскивать данные в том виде
> в котором они нужны.


Чувак, ты думаешь, что если ты будешь свою инфу хранить в файле, это будет быстрее работать?
Лично у меня по этому поводу - офигенные сомнения.

Не хочешь использовать серверную СУБД - используй embedded-решение.


 
MBo ©   (2008-01-21 09:52) [4]

1. создаем структуру данных для хранения - если добавление-удаление будет редко - то массив, если часто - список
2. чтобы не тасовать сами данные - создаем структуры для косвенной сортировки - например, бинарные деревья (сбалансированные, например - красно-черные), содержащие указатели на данные (или индексы в случае массивов). Для сортировки и отбора по нескольким полям - можно несколько деревьев

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


 
Сергей М. ©   (2008-01-21 09:54) [5]


> В сторону СУБД смотреть не хочу


А придется.


> хочу уменьшить сетевой трафик


См. 3-хзвенную архитектуру распределенных СУБД-приложений.


 
Jeer ©   (2008-01-21 09:54) [6]


> VladSel   (21.01.08 09:41) [2]
>
> В сторону СУБД смотреть не хочу,


Если хочется идти своим путем - иди. Большинству же вполне понятен совет в посте[1].

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


 
Sergey13 ©   (2008-01-21 10:18) [7]

А еще можно велосипед изобретать - тоже нужное дело.


 
engine ©   (2008-01-21 10:21) [8]

> [7] Sergey13 ©   (21.01.08 10:18)

Ага, только обязательно с квадратными колесами )


 
palva ©   (2008-01-21 10:22) [9]

VladSel   (21.01.08 09:41) [2]
> В сторону СУБД смотреть не хочу

Можно использовать Recordset не связывая его с СУБД. Сортировать, фильтровать, сохранять в файл и загружать из файла в виде XML, отображать в DBGrid. Если данных немного, то это будет не так уж и медленно.
Но лучше, конечно, делать через СУБД. Слишком много там понаделано такого, что в противном случае придется писать самому.


 
Amoeba ©   (2008-01-21 16:02) [10]


> engine ©   (21.01.08 10:21) [8]
>
> > [7] Sergey13 ©   (21.01.08 10:18)
>
> Ага, только обязательно с квадратными колесами )
>

А с круглыми и не получится ...



Страницы: 1 вся ветка

Текущий архив: 2008.02.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
15-1199955435
koha overload
2008-01-10 11:57
2008.02.10
Кто работал с ресурсами?


15-1199810913
antonn
2008-01-08 19:48
2008.02.10
Билл Гейтс покидает Microsoft


11-1183705434
Dy1
2007-07-06 11:03
2008.02.10
сортировка в KOLComboBox


9-1166122081
$'Talker
2006-12-14 21:48
2008.02.10
2D Физика. Нужна информация


15-1199963354
Layner
2008-01-10 14:09
2008.02.10
Люди, объясните в чем подвох, сам разобрать не могу