Страница: 1 |
Страница: 1 |
Вопрос: Выбор способа хранения данных
Добавлено: 10.10.04 16:52
Автор вопроса: Comanche
Имеется N ASCII-файлов, где 0 < N < 2000 (примерно). Размер каждого файла - произволен (от 1 кб до 10 мб). Необходимо все файлы хранить "в одном месте" (хранилище), чтобы скорость доступа к этому хранилищу (запись/чтение/удаление) была... мм-м... так скажем - "приемлемой".
При этом нужно обойтись без БД.
Какую технологию выбрать? Голову сломал. Использовать бэйсиковские Get/Put и Binary Access? - будет медленно... АПИ? - какие?... вообще плюнуть и работать через БД? - не хотелось бы требовать наличия MDAC'а на компе пользователя (хотя ясное дело, MDAC стоИт у любого, у кого стоИт хотя бы MS Office 2000).
Если простого и красивого решения нет (что скорее всего), то сделаю через ADO. Но всё же?!
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #1
Добавлено: 10.10.04 16:57
PS: если кому интересно, зачем всё это, - то нужно сделать "хранилище" для почтовых сообщений. Аутлук-то, наверняка, свои PST-файлы пишет в каком-нибудь БД-формате... по-другому никак?
Номер ответа: 2
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #2
Добавлено: 10.10.04 17:05
Посмотрел статью Эскина "Visual Basic позволяет использовать Текстовый файл, как база данных" (http://www.vbnet.ru/articles/showarticle.aspx?id=52) - не очень чтобы очень: при необходимости изменить/удалить/создать запись в "базе" выполняется операция перезаписи ВСЕЙ базы.
По-другому наверное и не сделаешь... м-да, наверное я изначально задал глупый вопрос...
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 10.10.04 22:34
Создай, зарезервируй заголовок, в котором будешь хранить данные, т.е. сколько файлов, какие, смещения, размеры... Навигация по файлу будет достаточно шустрой... Ну а то что не ах как по порядку все это дело будет, дык и в БД не лучше... Как надо удалить файл, просто в заголовке сделай пометку о свободном участке, как что записать, пробуй записывать сразу в первый попавшийся участок, а если места не будет хватать зарезервиркй символ перехода по смещению, вобщем создай свой ормат и интеллектуальный обработчик твоего файла Чем тебе не БД получится... даже что-то от файловой системы будет, всмысле фрагментации файлов
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 10.10.04 22:56
Это вроде называется связанные списки. И плюс в начале каждого сегмента указывать длину сегмента или начало следующего
Номер ответа: 5
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #5
Добавлено: 10.10.04 23:39
Прикольно... идея понравилась. Попробую сделать - если быстродействие окажется приемлемым, то почему бы и нет.
PS: Как назло, сегодня сделал вывод, что у меня туго с написанием БЫСТРОГО кода ) какой свой проект не возьму - огромное поле деятельности для оптимизации. И даже понял, почему: от "торопыжества". Какой-то дебильный у меня стиль разработки: во-первых, всегда выбираю самый сложный путь - т.к. интересно не столько написАть РАБОТАЮЩИЙ проект, сколько попутно разобраться в чём-то новом и сложном; а во-вторых, как только в этом разберусь и все сложные места сделаю - то быстро теряю интерес и на остальные места "забиваю" и делаю их тяп-ляп, в смысле не слишком заботясь о скорости, оптимальности и т.д. Вот блин (
Сорри за небольшой офф-топ: крик души!
Номер ответа: 6
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #6
Добавлено: 12.10.04 09:54
Если так уж приперло хранить большой объем данных в собственном
формате, как это например делает TheBat, то нужно еще сделать
небольшой индексный файл, в котором разместить данные для возможного
поиска/сортировки или отображение списка в программе.
Например, когда я начинал делать под .NET мэйлер по аналогии TheBat
(кстати, по началу неплохо получалось, но потом энтузиазьм иссяк), я
письма хранил в формате TheBat, и сделал индексный файл для каждого
файла данных... Индексный файл был отсериализованной коллекцией, он
полностью грузился в память и содержал необходимые данные для
отображения и offset каждого письма в файле данных). В итоге получаем
более-менее быструю загрузку списка записей, возмжность сортировки и
быстрого неполнотекстового поиска, а файл данных тягать только для
непосредственного чтения/записи писем.
Причем файл данных самодостаточен, т.е. дублирует всю информацию из
индексного файла, так что при потере индексного файла он воссоздается
заново на основе файла данных.
Но все же лучше юзать нормальные СУБД, они отлично оптимизированы, с
ними удобнее работать, и не нужно писать лишнего кода
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 12.10.04 19:16
Дык а зачем его тягать полностью, взять считать нужные данные о смещениях и все ок... А проще, даже лучше и удобней отмаппировать файл в память, и работать с ним влегкую, не занимая лишней памяти...
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 13.10.04 00:56
Ну не знаю парни.. А к чему изобретать велосипед?? Я для подобных целей использовал mdb базу. MDAC и Офис таскать совершенно не обязательно. Я таскаю лишь DAO 3.6 (проверял на голой винде-все отлично работает!!)
Преимущества очевидны!! и поиск вам.. и сортировка.. и компактность..и скорость доступа.. и все остальное. Если нет каких либо особых условий и ограничений,чем это не вариант??
Номер ответа: 9
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #9
Добавлено: 13.10.04 02:36
Если так уж приспичило без базы данных, то как сказал Павел, файл своего формата (может в нем каждая запись как пользовательский тип, фиксированного размера,члены этого типа по аналогии с полями БД - long, string,Currency и т.д.) и маппировать его в память. Размер типа фиксирован - навигация, поиск, сортировка, удаление, добавление будут предельно простыми операциями, т.к. работать будешь только со смещениями от начала файла, сами структуры тягать не надо. Получится практически та же БД, только с самодельным драйвером.
Номер ответа: 10
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #10
Добавлено: 13.10.04 10:38
Eros, я бы тоже таскал только его, если б знал, какие файлы класть в инсталлягу. Я, не мудрствуя лукаво, всегда клал "рядом" с дистрибутивом MDAC и с помощью InnoSetup отдельно предлагал его установить. Насколько я знаю, "выдернуть" из MDAC'а только ADO-шные библиотеки невозможно, а вот насчёт DAO-шных библиотек - не знаю. Судя по тому, что ты говоришь, это возможно. Так? Если да, то это здорово: только даошные файлы будут весить несравнимо меньше, чем весь MDAC. Знать бы, какие именно файлы нужны.
Кроме того, если у проги есть ограничение - работает только под Win2k и выше (из-за АПИ VirtualAllocEx) - то м.б. вообще не париться насчёт DAO? в смысле, что эти библиотеки по-любому есть под этими версиями ОС... или не так?
Номер ответа: 11
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #11
Добавлено: 13.10.04 14:54
У меня весь инсталл, вместе с дровами, exe-шником, хэлпом, Sample-базами вдвое меньше MDAC'a. Сам MDAC таскать вовсе не нужно, только то, что ты подключил в Reference или как компоненты. И провайдера, которым пользуешься. А из MDAC'a элементарно всё извлекается обычным WinRar'oм. Любой файл. Да и нет в этом никакой необходимости. Все эти файлы есть по отдельности на винте, а список того, что внутри MDAC'a есть в msdn.
Номер ответа: 12
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #12
Добавлено: 13.10.04 15:46
http://safariexamples.informit.com/0130907634/Microsoft/MSDE/70SP3/MDACredist.txt
- там чёрт ногу сломит!
Номер ответа: 13
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #13
Добавлено: 13.10.04 16:17
Comanche,
Что то я не врубился в вопрос. А что в директорию их нельзя сложить? Или ты их хочешь склеить? Если второе, то чем тебя такое не устраивает?
http://www.vbnet.ru/forum/show.aspx?id=58095
Номер ответа: 14
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #14
Добавлено: 13.10.04 18:17
Закрываю тему.
Всем спасибо.