Задать вопрос
Ответы пользователя по тегу Программирование
  • Как лучше сохранить данные?

    AlexMcArrow
    @AlexMcArrow
    Люблю РНР, да я такой!
    Исходя из задачи:
    Вы храните KEY - VALUE. Нам заренее не изветен ни KEY (тип и формат данных - строка или число) ни VALUE (его размер)
    1) так как запрос на "чтение\запись" будет идти по ключу - высчитываем хеш ключа (sha256), берем несколько "октет" (у меня они так в голове называются) от хеша и дописываем\создаем файл с таким именем (это будет наш индекс ключей)
    2) пишем VALUE в преобразованном формате (base64 или еще как) в файл данных в строку соотвествующую следующему индексу
    Получается следующий фарш:
    --------------
    Создание записи:
    Принмаем что БД пуста.
    KEY = test
    VALUE = datastring
    HASH = sha256(KEY) = 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
    OCTET = HASH[1-6] = 9f86d0 (три пары)
    файл индекса = [OCTET].map (mapper)
    файл последовательности записи = [OCTET].pnt (pointer)
    файл данных = [OCTET].dat (data)
    Читаем:
    PNT (последовательный указатель - номер строки в файле данных) = read([OCTET].pnt)+1 = 1
    Пишем:
    [OCTET].map =>
    9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 = [PNT]
    [OCTET].pnt = [PNT]
    [OCTET].dat[PNT] = VALUE (предварительно преобразовываем - base64 или иное) = Пишем в строку равную PNT в файл [OCTET].dat - это сразу дает и запись и обновление данных
    --------------
    Чтение записи:
    KEY = test
    HASH = sha256(KEY) = 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
    OCTET = HASH[1-6] = 9f86d0 (три пары)
    файл индекса = [OCTET].map (mapper)
    файл данных = [OCTET].dat (data)
    Читаем файл [OCTET].map и ищем HASH = получаем указатель строки в файле данных = PNT
    Читаем файл [OCTET].dat[PNT] (читаем строку PNT) = VALUE (преобразовываем в исходный формат)

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

    PS\ как более оптимальный вариант - хранить каждый блок данных в отдельном файле с именем = хешу от ключа.
    Ответ написан
    2 комментария