Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
2-1200391223
Lamer666
2008-01-15 13:00
2008.02.10
MDI и ActionMeneger+ActionMainMenuBar


6-1179212393
gimbat
2007-05-15 10:59
2008.02.10
Спам фильтр для Exchange Server


4-1182240688
Dib@zol
2007-06-19 12:11
2008.02.10
Наборы векторов из символа шрифта


15-1199365806
Piter
2008-01-03 16:10
2008.02.10
Умер Александр Абдулов


15-1199936235
Slider007
2008-01-10 06:37
2008.02.10
С днем рождения ! 10 января 2008 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский