Программирование своей БД. Чтения/запись БД несколькими юзерами. (Си)

Тема в разделе "WASM.PROJECTS", создана пользователем Rel, 23 янв 2009.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    Здравствуйте! Не приходилось ли вам писать свою базу данных? Сразу предупрежу, что вопрос не срочный, а для общего развития, просто интересно, а гугл не помогает... Вобщем ближе к делу... Предположим есть некоторая база данных элементов (далее справочник)... В этом справочнике у каждого элемента есть переменное число параметров вида: имя параметра, значение параметра (и имя и значение типа строка)... Этот справочник соответственно требуется уметь читать и записывать в файл... Файл справочника лежит в сети, клиентские приложения установлены локально на нескольких рабочих станциях... Если в одно и тоже время с базой работает один пользователь, то все просто (можно загрузить справочник из файла в память, там его читать/редактировать и многое другое)... Но если в одно и тоже время со справочником работают несколько пользователей возникают проблемы (допустим, один загрузил в память, затем второй загрузил в память, первый отредактировал и сохранил, затем второй отредактировал и сохранил, но получается, что изменения первого пользователя пропадут)... Так вот, можно канеш решить эту проблему путем блокировки базы во время её редактирования, но это не красиво... Можно индексировать файл базы и считывать элементы по мере необходимости, однако при каждом изменении файл придется переиндексировать для всех пользователей, поскольку занимаемое каждым элементов количество байт будет меняться (всмысле занимаемое каждым элементом место не фиксировано, и в данном случае зафиксировать его вряд ли получится)... Какое по вашему мнению решение будет наилучшим?

    ЗЫ не ругайтесь особо, если было уже недавно... я чет не нашел...
    ЗЗЫ и большая просьба не отвечать односложно, а то я не пойму и буду переспрашивать)))
     
  2. Scratch

    Scratch New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2005
    Сообщения:
    161
    делай у записи битовый флаг locked и проверяй его перед тем как изменить ее. после изменения устанавливай его в false, таким образом залочится не вся база, а конкретная запись.
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    нет, это то понятно... вопрос даж скорее, каким образом лучше и проще хранить данные такого типа в файле... ведь размер элемента не фиксирован, а каждый раз делать переиндексацию файла тоже не очень удобно... под индексацией файла подразумевается: обойти всю базу и сохранить адреса (смещения) элементов, чтобы потом по этим меткам считывать их из файла... но изменив один из элементов фактически придется переписывать весь файл, а потом для каждого клиента переиндексировать (индексы видимо придется хранить либо в памяти для каждого клиента отдельно, либо в отдельном файле (второй вариант канеш проще))... может есть решение ещё проще и удобнее?
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Rel
    хранить в виде одно, а лучше двусвязного списка. Те даже при добавлении в середину, запись физически будет добавлена в конец, но ссылки соседей требуемого места будут поправлены на нее. Предусмотреть также возможность конкурентных значений (так данные хотябы не потеряются). это будет по 2 ссылки на запись и по одной на значение.

    а переиндексацию не надо. сразу отображайте на хэш таблицу или дерево. Ссылки дерева можно сразу в формат записи встроить.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    да... немного замудренная, но хорошая идея... спасибо!
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Rel
    умнее всего было бы сделать проект осовым и коллективным. Не исключено, что получилось бы нечто неплохое и юзабельное.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    чет я не понял это слово))))) от аббревиатуры ОС (операционная система) штоли?)))))

    блин... я б с радостью, но сейчас делаю дипломную работу, времени на что-то масштабное нет... к тому же бескорыстное сотрудничество в написании фриваре программ - крайне неблагодарное дело))))
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Rel
    oc - опен сорс. например мит или бсд
    еге. вы продать свою либу собирались? либы такого рода именно что совместно писать и надо. и качество повышается и функциональность. и время которого нет экономится. ну, а что юзать все смогут, так что вы теряете?

    впрочем дело ваше
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    ну это само собой)

    нет канеш... это я так, для себя... чтобы делать коммерческий софт нужно:
    1) хорошая идея... нужна программа, которой либо ещё не было, либо которая будет конкурентно способной... без этого группе интузиастов соперничать с фирмами сложно очень...
    2) защита от пиратства... при сегодняшнем уровне хакерства мне видется это совершенно невозможным...
    3) патенты на продукцию, чтоб кто-то другой денег с интеллектуального труда интузиастов не имел...
    4) лицензионные версии компиляторов, чтоб мелкомягкие не могли подать в суд)))))
    так что, только халявный и опен сорс софт остается))))
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Rel
    ерунда. гоните эти глупости от себя и не слушайте тех кто вам их рассказывает.
    тоже ерунда. хотя тут все зависит что такой защитой называть. в идеале вам все придется клепать хардверно.
    и что, сильно они помогут вам? все эти патенты на средневековое польское право похожи.
    совсем ничего не понял. возможно еси переформулировать..

    да не совсем все просто так. я не говорю, что такого нет, но вполне удовлетворительного - нет. или очень мало. (имеется ввиду маленькие, встраиваемые либы, а не монстры вроде mysql). поэтому, чтоб потом не чухать лысину, неплохо бы подумать заранее и не лепить очередную недоделку фор фан, а сделать юзабельно. пусть даже и коллективно. тем более, что подельников вы сами отобрать можете. и не отдавать сорцы всем.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    ща попробую поянить... смысл в том, что мелкомягкие специально выпускают разные версии той же вижуал студии... одна нормальная, но стоит денежек... вторая бесплатная и урезанная (для студентов там всяких)... на второй толковое что-то написать гораздо сложнее... это все делается для того что, если что-то толковое выходит от людей, не использующих лицензионную версии первой версии студии, майкрософт мог бы срубить с них бабла... имеется ввиду канеш обычная и экспресс версия студии...

    ну это ты загнул))) это уже не только программистская работа))))

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

    вот именно соперничать с "монстрами вроде mysql" нереально... а смысл придумывать что-то, если все юзают этих самых "монстров"... все равно лучше ничего не сделать...
     
  12. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Что скажете насчет этого? Может кто юзал?
    http://www.internet-freeware.org.ru/
    По теме топика внимание обратить на
    ESDB (Extra Systems Database) - бесплатная СУБД для Windows.

    Там кстати многие (а может и все) продукты написаны на ассемблере...
     
  13. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Rel
    опен ватком делает очень приличный код. есть и другие тулчайны. не юзайте МСВС если не хотите.
    боитесь ручки замарать? авр/арм контроллеры имеют фузы блокировки внешнего считывания/пароли. юзайте борды на них
    суд денег стоит. больших денег. а потом.. что вы знаете о польском праве в средние века?
    виделитити, майскл не всегда было. и до него было. и тоже монстры и фирменные и крутые. а всякие "все равно лучше ничего не сделать.." - торговая марка лодырей. хотите обижайтесь, а хотите нет.

    вариантов когда подобное нужно даже больше чем хотелось бы. достаточно одного только требования о независимости от внешних установок (база данных - оч полезная вещь и так или иначе требуется в большинстве прог, но юзанье здоровенных тормозов типа всяких скл делает это невозможным)
     
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    фактически ничего... но интересно... просвятите меня)))

    на правду не обижаются... но все же, чтобы склипать что-то стоющее, что-то, что будет окупаться одного интузиазма и умения программировать маловато...

    да... маленькую базу данных сделать не так сложно... или заточенную под конкретную задачу... но для в решении общих задач скл не переплюнуть...

    причем тут руки? у меня нет никакого опыта написания драйверов и других "вещей общения" софта с оборудованием...
     
  15. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Rel
    долго рассказывать. В двух словах в речи посполитой были очень продвинутые законы. Посполитый парламент только чуть младше английского. Но государство (король) совершенно не брало на себя ответственности и поддержки законов. Те принятие судебного постановления (все полностью проплачивалось заинтересоваными сторонами, не исключено, что современная ситуация со взятками - традиция еще с тех времен) только давало повод для принятия мер по восстановлению справедливости заинтересованой стороной. Своими силами. Причем ответная сторона могла подать на эти меры в суд также. Итд. Те достаточно сильные и богатые магнаты даже совершив преступление против короны и будучи изгнаными (бониты), прекрасно себе жили и даже не чухались по поводу своей внезаконности.

    еще раз читайте про торговую марку, возникновение перла, пхп итд.

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

    мнем
     
  16. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    _basmp_ двухсвязный список это конечно же хорошо, но что если надо будет удалить данные из середины файла бд? или увеличить запись в размере?
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    2FED
    есть решения и по этим вопросам. все не так просто и банально как считает ТС (#14). поэтому и предлагаю один раз собраться и выпилить либу пригодную для встройки в программу. как минимум никто от этого не проиграет.

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

    некоторая избыточность конечно будет (можно слегка паковать инфу в записях), но и +++ очевидны.

    еще раз повторю - вопрос достаточно интересен чтоб не решать его исключительно симптоматически
     
  18. apx

    apx New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    25
    Мне это довольно интересно, готов даже оказать посильную помощь в человеко-часах и возможно материальную еслди очень надо будет (хостинги, шмостинги), если прожект будет опенсурс и найдется хотя бы еще кто-то для этого проекта.
     
  19. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    apx
    прожект такой нет смысла делать не опен сорс, тк задача это вспомогательная, но вылизать ее надо солидно. Вот насчет гну - сомневаюсь.
    в чем заключается человекочасовая помощь?
    - // - материальная помощь?
    Ну и ваши соображения по теме? Согласны ли вы сами работать? Виденье темы?
    Пишите. И довольно подробно.
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    вообще давненько я предполагал делать так:
    - справочник состоит из множества некоторых элементов
    - у каждого элемента есть внутренний индекс (код типа строка или целочисленный тип), по котором можно связывать несколько справочников друг с другом сродни системе реализованной в 1С (простой пример: в справочниках отделов организации - ссылки на элементы справочника сотрудники организации и тд)
    - у каждого элемента будет переменный набор свойств вида:
    -- наименование поля (тип строка)
    -- значение поля (тип строка)