Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 12.10.04 09:54
Если так уж приперло хранить большой объем данных в собственном
формате, как это например делает TheBat, то нужно еще сделать
небольшой индексный файл, в котором разместить данные для возможного
поиска/сортировки или отображение списка в программе.
Например, когда я начинал делать под .NET мэйлер по аналогии TheBat
(кстати, по началу неплохо получалось, но потом энтузиазьм иссяк), я
письма хранил в формате TheBat, и сделал индексный файл для каждого
файла данных... Индексный файл был отсериализованной коллекцией, он
полностью грузился в память и содержал необходимые данные для
отображения и offset каждого письма в файле данных). В итоге получаем
более-менее быструю загрузку списка записей, возмжность сортировки и
быстрого неполнотекстового поиска, а файл данных тягать только для
непосредственного чтения/записи писем.
Причем файл данных самодостаточен, т.е. дублирует всю информацию из
индексного файла, так что при потере индексного файла он воссоздается
заново на основе файла данных.

Но все же лучше юзать нормальные СУБД, они отлично оптимизированы, с
ними удобнее работать, и не нужно писать лишнего кода :)

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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
Я таскаю лишь DAO 3.6


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-сайт: basicproduction.nm.ru
 Профиль | | #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
Закрываю тему.
Всем спасибо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам