Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизОрганизация виртуальной памяти используя принципы работы БД Найти похожие ветки
← →
Master Kolyan (2004-09-11 20:38) [0]Для организации виртуальной памяти необходимо создать базу данных с одной таблицей в одну колонку размер элемента которой скажем 2048 КБ. Но как я помню в этих базах стока наворотов (каких-то странных и непонятных) и у меня сразу возникает куча вопросов:
1) Увеличится ли скорость доступа к данным если во много раз увеличить размер базы данных, и зависить ли эта скорость от позиции этих данных в базе?
2) Если ответ на первый вопрос отрицательный, то как мне написать свою базу данных убрав кучу лишнего, каковы принцыпы работы баз данных, можно ли вообще организовать виртуальную память таким макаром?
Спасибо!
← →
Sergey_Masloff (2004-09-11 22:09) [1]Ни фига не понял но база данных тут точно не нужна. Заведи файл любого размера кратного 2048 и читай из него такими блоками. Только на фига это нужно лично я не понял.
← →
Master Kolyan (2004-09-12 06:30) [2]Дело в том, что чтобы добавить новые данные скажем в середину файла необходимо сдвигать имеющиеся данные, чтобы освободить место для новых данных. А куча пустого(резервного) места в файле тоже ни к чему.
← →
сергей1 (2004-09-12 11:30) [3]бросай обкуриваться и займись лучше спортом, товарищь Коля.
ты сам-то понял, что написал ?
можешь обьяснить связь между базами данных, виртуальной памятью и файлом, в который нужно что-то писать ?
манипулировать файлами ты можешь с помощью функций fileopen и filewrite, либо с помощью класса tstringlist, там удобно работать со строками.
Когда добавляешь данные в середину файла, там само все сдвинется куда надо без твоего непосредственного участия
← →
Master Kolyan (2004-09-12 11:53) [4]вообще-то мне надо организовать систему для хранения данных как кратко так и долговременных, причем доступ на чтение и на запись и добавление данных должны быть как можно быстрее и не должны зависеть от позиции этих данных в файле... вот... незнаю как
← →
Master Kolyan (2004-09-12 11:55) [5]операция со сдвигом занимает много времени и ктому же зависит от размера файла моей так сказать виртуальной памяти... так нельзя.
← →
Наталия © (2004-09-12 11:57) [6]Если использовать подходящую БД и грамотно постороить индексы, то скорости можно добиться. Позиция данных в базе тебя вообще не должна волновать - это дело самой СУБД, в какое место помещать эти данные...
← →
Наталия © (2004-09-12 11:59) [7]Ты определись сначала - какой у тебя объем данных будет, их структура, в зависимости от этого и решай - просто файл подойдет тебе, текстовый или типизированный или нужна именно СУБД для работы с твоими данными. Когда определишься, тогда и формулируй вопрос. Желательно попонятнее.
← →
Master Kolyan (2004-09-12 12:13) [8]Значит объясняю ситуацию:
Задача: построить универсальную систему хранения временных данных и ресурсов(долговременных данных) моей программы в одном или нескольких файлах примерно по 100 чтоли МегаБайт.
Требования: высокая и независимая скорость доступа к данным, а так же добавления и удаления данных.(экономя при етом место на ЖД)
вариант решения задачи: использовать принцип работы файловой системы, т.е. создать базу данных из одной таблицы с размером одного элемента в несколько килобайт, а там уже организовать как бы "файловую систему", тока вместо файлов будут временные данные и ресурсы проги...
почему-то за какую прогу не возьмусь, без нормальной и универсальной системой организации хранения данных и ресурсов ничего делать не могу.(или не хочу)(болезнь у меня такая - стремиться к совершенству и универсальности)
← →
Наталия © (2004-09-12 12:23) [9]"Универсальная система" - сказано просто супер! :))
Обычно данные относятся к какой-либо предметной области.Обычно от этого зависит структура и количество таблиц СУБД. Примерный объем данных,необходимые операции над ними определяют и (в большей или меньшей степени) выбор СУБД. У тебя это реальный проект или учебная задача?
← →
сергей1 (2004-09-12 12:40) [10]>Задача: построить универсальную систему хранения временных данных и ресурсов(долговременных данных) моей программы >в одном или нескольких файлах примерно по 100 чтоли МегаБайт.
что за программа ?
← →
Anatoly Podgoretsky © (2004-09-12 13:23) [11]Наталия © (12.09.04 12:23) [9]
Это дурь.
← →
Master Kolyan (2004-09-12 13:32) [12]>Наталия[9] Это реальный проект и научная работа, т.е. я создаю модуль для работы с памятью компа и внедряю его в свои программы.
На счёт "учебой задачи", то программированию меня не обучали и не обучают, хобби у меня такое, и задачи я себе ставлю не хухры мухры...
>сергей1[10] у меня на уме не одна программа а дофига, но на данный момент хочу реализовать хороший интерпретатор и компилятор в машинный код, затем его можно использовать для построителя графиков различных функций, например функций комплексного переменного, еще хочется написать хороший движок для игры или игр(компилятор пригодится), короче пока я занимаюсь тока разработкой основных модулей для будующих программ, и поскоку мне неизвестно какие запросы будут у этих программ к ентим модулям или библиотекам - стараюсь сделать их как можно универсальнее...
← →
Master Kolyan (2004-09-12 13:40) [13]Anatoly Podgoretsky © [11] Может у кого-то с организацией памяти программы не возникает проблем. Может что-нибуть посоветуете запутавшемуся программисту...
← →
сергей1 (2004-09-12 13:58) [14]> хочу реализовать хороший интерпретатор и компилятор в машинный код
>затем его можно использовать для построителя графиков различных функций
а чем не устраивают уже существующие компиляторы ? их же немерянно понаделано, зачем велосипед изобретать, тем более, уверяю тебя, лучше чем уже есть не сделаешь, тем более, если программированию не обучался.
и вообще, каким образом можно использовать компилятор в машинный код для построения графиков функций ?
>разработкой основных модулей для будующих программ, и поскоку мне неизвестно какие запросы будут у этих программ к ентим модулям
как можно делать модули неизвестно для чего ?
чем-то непонятным вы там занимаетесь ...
← →
Master Kolyan (2004-09-12 14:13) [15]>сергей1 [14]
да я не обучался программираванию но благодаря 10 годам этого увлечения я владею этим мастерством не хуже чем студент пятого курся пристижного вуза...
>как можно делать модули неизвестно для чего ? Вот именно я ЗНАЮ что делаю, просто мои мысли намного опережают мои действия, и это всё потому что я не учился в пристижном вузе и не знаю всех средств реализации...
← →
Master Kolyan (2004-09-12 14:16) [16]>и вообще, каким образом можно использовать компилятор в машинный код для построения графиков функций ?
Написаная мной функция(текстом в кодовом поле окна) компилируется, потом в неё подставляются значения, и график строится с невероятной скоростью, для функций комплексного переменного эта скорость очень нужна.
← →
Наталия © (2004-09-12 14:19) [17]Извините меня, но это бред какой-то...
Смешано все в кучу - компиляторы, базы данных, виртуальная память, игры... У Дмитрия О. появляются последователи... :)))
← →
Master Kolyan (2004-09-12 14:28) [18]компиляторы, базы данных, виртуальная память: это все единое целое - это часть виртуального мира...:)
← →
Master Kolyan (2004-09-12 17:54) [19]Вот: (сам придумал то чо нужно)
Мне значит необходимо хранить данные в виде кучи фрагментов по 2048 Байт скажем. Создаём файл в который помещаем в произвольном порядке все эти фрагменты, и создаём другой файл с идентификаторами - каждому идентификатору соответствует позиция фрагмента данных в первом файле начиная с начала. Во втором файле хранятся только указатели, там могут быть и пустые указатели - они говорят о том, что фрагмента данных с таким идентификатором нету (идентификатор = позиции указателя во втором файле). Второй файл занимает совсем немного места на ЖД по сравнению с файлом данных. Далее объясняю как работать с фрагментами данных:
1) добавление фрагмента: просто добавляем в конец первого файла 2048 байт. Проблема тут в том, чтобы найти среди этой кучи пустой идентификатор, ну допустим нашли, и повесили на него нужный указатель.
2) удаление: тут проще - зануляем указатель в первом файле, копируем фрагмент данных с конца второго файла на место удаляемого(вот почему размер фрагментов данных одинаковы), изменяем указатель свежеперенесенного фрагмента на указатель затертого(удаленного).
3)чтение: ну тут все просто: смотрим указатель в первом файле и читаем по нему данные из второго файла.
4)запись(изменение): то же самое: смотрим указатель в первом файле и изменяем по нему данные во втором файле.
Из всего етого у меня возник тока один вопрос - в пункте 1) проблема с поиском незабитых идентификаторов???
← →
Tano © (2004-09-12 22:04) [20]Уважаемый, у меня уже около двух лет, в качестве хобби, работа по созданию именно такой "СуперМегаУниверсальной базы данных" и именно скоростной и самое интересное для таких же целей!
Так вот, за этот не малый срок я понял, что задача это не тривиальная и наскоком универсальности не добиться. Я больше 10 раз переписывал ядро полностью и привинтил чудесную иерархию вложенных и связанных классов.
Поизучайте основные принципы работы реляционных СУБД и файловых систем, обратите внимание на индексирование (там широко применяется то, что Вы придумали в последнем сообщении).
А по теме ветки, так раздвигание гигабайтового файла происходит доли секунд, если использовать BlockRead с буффером огромного размера (считал, записал в позицию на N байт дальше - вот и окошко получилось).
Еще не забывать, что у Win есть ограничение на объем RAM, выделяемой отдельной программе - около 2Gb (см. Help).
А еще, ветке - прямая дорога в "Потрепаться".
← →
Tano © (2004-09-12 23:35) [21]Кстати, программирование здесь многие сами изучали :) и некоторые знают 8 разных языков :-P
← →
Master Kolayn (2004-09-13 03:27) [22]>Tano
Пасиб!!!
все закрыли тему...
← →
Sergey13 © (2004-09-13 09:27) [23]Хорошая тема для утра понедельника. Бодрит. 8-)
← →
std (2004-09-14 00:07) [24]2Master Kolayn:
>не хуже чем студент пятого курся пристижного вуза...
>что я не учился в пристижном вузе
Вы случаем не комплексуете, что не учились в престижном вузе?..
честно говоря не понял чем именно так хороша Ваша организация VM?
механизмы VM от OS уже не рулят? :\
2Tano:
>так раздвигание гигабайтового файла происходит доли секунд,
>если использовать BlockRead с буффером огромного размера
обьясните плз как можно за доли секунд перенести гигабайт данных? как насчет пропускной способности IDE интерфейса?
теоретически _очень_ быстро раздвинуть файл можно. (рассуждаю только про FAT т.к. NTFS руки не дошли дочитать..) но только на размер кластера. сделать это можно прямым изменением таблицы размещения (FAT). но это очень лабораторный случай.
cheers,
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.069 c