Разъясните принцип работы с файлом несколькими пользователями

Тема в разделе "WASM.HEAP", создана пользователем device, 18 июн 2008.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Вот я создал файл. Размером в 6 гигабайт.

    Есть 100 человек, которые желают его прочитать, и еще 2200 желают в него что-то написать. Причем эти товарищи хотят все это сделать прямо сейчас. Как быть?
    Щас вы мне скажете: Используй блокировку. Но если так, то пока один не запишет - другой будет ждать.
    А как, например, работают субд MySQL, Postgres, FireBird?

    PS.: Сейчас вот что происходит: к файлу "user_data.txt" из сети лезут две с половиной тыщи человек непонятно с какими намерениями:) Чего делать?
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    device
    Но, эти 2200 человек, ведь не печатают прямо в файл?..А для того, чтобы "сохранить изменения", вроде, и не так много времени нужно?
     
  3. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Ну, хорошо. Допутим, с пишущими понятно - можно организовать очередь и пускать по одному юзеру.
    А с читающими как?
    Я просто боюсь что скорость работы будет очень медленная. Сеть отключил нафиг. Достали.

    Схема может быть такая:

    читатель (Ждет)
    Писатель (ждет)
    писатель (ждет)
    писатель (пишет)

    потом

    читатель (ждет)
    писатель (ждет)
    писатель (пишет)
    писатель (кончил, сказал об этом своему соседу, пошел умирать)

    Конченные писатели умирают первыми
     
  4. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    device
    > А как, например, работают субд MySQL, Postgres, FireBird?
    так они не с текстовыми файлами работают ;)
    текстовой файл _такого_ размера вообще ужасная штука, особенно если запись происходит в середину с раздвижной. тогда точно все кто в очереди сдохнут и отвалятся по тайм-ауту. ну а так, в целом, алгоритм такой: огранизуем данные на худой конец в виде списка из блоков размеров с кластер, и блокируем только те блоки, в которые происходит запись, а можно и не блокировать, просто при начале записи создавать копию блока, а по окончании замещать ее в списке, тогда время блокировки сократиться до времени замещения блока данных в списке, что стоит всего несколько операций записи в память (где хранится кэш ссылок :derisive:.
    как бонус можно предусмотреть уведомления клиентам, что данные которые они загрузили - изменились. все это будет очень быстро работать с огромным кол-вом человек ;)
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    device
    Читающим рассылаешь копии файла, при появлении изменений в файле - копии обновляются. В случае с пишущими в файл (по аналогии с БД) распределяются права - пользователь А может писать только в фрагмент файла #1, пользователь Б в #2 и т.д.
     
  6. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    device

    Точно так же как работает кэш процессоров. У тебя есть огромный файл - разбей его на ряд мелких регионов далее лок региона и запись. Возможно будет лок соседних регионов. В итоге если все хотят записать в одно место - будут ждать если в разные - пожалуйста :)

    Есть еще нюанс - различный вид доступа (чтение или запись) - вот тут главное в кучу все не смешивать - любая запись в регион - оповещение клиента читающего его. + конечно асинхронный вызов процедур и опираться на пул потоков в виндовс, а не создавать свои для каждого обращения. Собственно эта штука так хорошо организована в серверных вариантах винды, что порой обгоняет линукс по скорости.
     
  7. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    device, в сторону SQLite смотрел ?
     
  8. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    T800
    Нет. Кстати, идея!
     
  9. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    device
    для твоей задачи ничего лучшего, чем бд, не придумали:))