ФорумПрограммированиеПыхнуть хотите?Готовые решения → BlobStorage 0.1 Alpha :)

BlobStorage 0.1 Alpha :)

  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 5 ноября 2010 г. 23:31

    Начитавшись про архитектуру фэйсбука, а именно про то как они хранят изображения надумалось реализовать это дело для себя, а заодно и поделится с пыхой) Хотя ничего сложного в реализации нет но все же :)

    И так, пример, думаю, будет исчерпывающим:

    <?php
    include 'blob.class.php';

    // Подаем конструктору имя папки, в ней будут лежать хранилище и файл индекса. Слэш на конце обязателен!
    $b = new Blob('images/');

    $id1 = $b->set(file_get_contents('1.jpg'));
    $id2 = $b->set(file_get_contents('2.jpg'));

    file_put_contents('test.jpg', $b->get($id2));


    Пинать нужно, но конструктивно :)

    P.S. Ушел спать…
  • phpdude

    Сообщения: 26640 Репутация: N Группа: в ухо

    Spritz 6 ноября 2010 г. 2:27, спустя 2 часа 55 минут 38 секунд

    Слэш на конце обязателен!

    обожаю такие комментарии, а если сделать так $path = rtrim($path, "/")."/";

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

    я бы делал не так

    Спустя 271 сек.
    я бы хранил информацию вот такими блоками, причем с подписью стопудово.

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

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

    индекс я бы отдаавал в виде (base_convert 10=>64) + "/" + UID, как раз тот секретный ключ.
    зачем ключ? чтобы человек не указал какой попало индекс и не прочитал возможно приватные данные :)
    1. blob.png (45)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 6 ноября 2010 г. 3:51, спустя 1 час 24 минуты 29 секунд

    rider-sx, хочется увидеть тесты на производительность. Без них как бы нет смысла использовать это
    Спустя 260 сек.
    	private function _fwrite ($data) {
    if($this->_desc) return fwrite($this->_desc, $data, strlen($data));
    else throw new BlobException('No file descriptor');
    }

    private function _fseek ($byte) {
    if($this->_desc) return fseek($this->_desc, $byte);
    else throw new BlobException('No file descriptor');
    }

    private function _rewind () {
    if($this->_desc) return rewind($this->_desc);
    else throw new BlobException('No file descriptor');
    }

    а тебе не показалось, что ты something do wrong? я про эксепшены
    Спустя 98 сек.
    и почему приватные? а может я захочу добавить нанесение ватем
    обожаю такие комментарии, а если сделать так $path = rtrim($path, "/")."/";

    бляя, я сам такой хуйней страдаю)
  • phpdude

    Сообщения: 26640 Репутация: N Группа: в ухо

    Spritz 6 ноября 2010 г. 4:17, спустя 25 минут 58 секунд

    Абырвалг, так вы все нубы
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 6 ноября 2010 г. 4:56, спустя 38 минут 18 секунд

    обожаю такие комментарии, а если сделать так $path = rtrim($path, "/")."/";

    +100500
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 6 ноября 2010 г. 7:32, спустя 2 часа 35 минут 55 секунд

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

    а тебе не показалось, что ты something do wrong? я про эксепшены

    Эмм, а что именно не так? Оо
    Спустя 200 сек.
    Я наверное дурак, но думаю что если хранить индексы в метаданных то поиск по файлу будет весьма не простой задачей, нежели чтение из файлы с индексами
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 6 ноября 2010 г. 8:00, спустя 27 минут 57 секунд

    обожаю такие комментарии, а если сделать так $path = rtrim($path, "/")."/";

    А если в начале тоже был слэш?) /var/storage/
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 6 ноября 2010 г. 8:06, спустя 6 минут 13 секунд

    А если в начале тоже был слэш?) /var/storage/

    не видишь отличий между trim и rtrim?
    Спустя 32 сек.
    Эмм, а что именно не так? Оо

    неужели тебя не смутили эти повторяющеся строки-проверки?
  • phpdude

    Сообщения: 26640 Репутация: N Группа: в ухо

    Spritz 6 ноября 2010 г. 8:10, спустя 4 минуты 39 секунд

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

    Сообщения: 5208 Репутация: N Группа: Джедаи

    Spritz 6 ноября 2010 г. 8:30, спустя 19 минут 11 секунд

    я когда делал подложку для гео писал всё все полигоны в один файл. Проблемы была в медленной прорисовке дедовским способом на экране нескольких тысяч домов, кусты бля всякие и т.п. - поэтому файл разбивался на квадраты и каждый раз вычислялось какие квадраты видимые. Для переносимости решено было всё хранить в одном файле, в котором хранились метаданные, описывающие адреса начал и концов квадратов, это всё читалось потомком с файла и летало пиздец как…
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 6 ноября 2010 г. 9:14, спустя 44 минуты 29 секунд

    не видишь отличий между trim и rtrim?

    Ступил, сорри)

    Вобщем как я понял, при записи возвращается уникальный айди и сдвиг в блобе, в блобе для каждой картинки сначала пишется метаинформация в которой хранится этот уникальный айди, размер картинки и сдвиг с которого она собственно и начинается, правильно?)
  • artoodetoo

    Сообщения: 5146 Репутация: N Группа: в ухо

    Spritz 6 ноября 2010 г. 10:11, спустя 56 минут 53 секунды

    phpdude, а как заставить вебсервер отдавать файл с определённого смещения? я что-то пропустил походу
    ιιlllιlllι унц-унц
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 6 ноября 2010 г. 10:17, спустя 5 минут 49 секунд

    artoodetoo, написат ьмодуль?
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • phpdude

    Сообщения: 26640 Репутация: N Группа: в ухо

    Spritz 6 ноября 2010 г. 10:51, спустя 34 минуты 32 секунды

    да. и кода там грош да маленько :-) я вот доводить желанием написать плагин для nginx :-)
    Сапожник без сапог
  • Sinkler

    Сообщения: 7941 Репутация: N Группа: в ухо

    Spritz 6 ноября 2010 г. 11:01, спустя 9 минут 15 секунд


    phpdude, а как заставить вебсервер отдавать файл с определённого смещения? я что-то пропустил походу
    ага

Пожалуйста, авторизуйтесь, чтобы написать комментарий!