Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение мультимедиа 
:(
    Опции темы
Aliance
Дата 7.4.2010, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Добрый всем день. У меня аналогичная проблема, что уже поднималась на этом форуме.
Но условия немного другие, поэтому создаю новую тему.

Итак, у меня есть 2 сущности: пользователь и товар. У каждой сущности может быть 0 или более фотографий.
Как лучше организовать хранение фотографий?

Кто-то мне посоветовал разбивать фотки по 1000, мотивируя тем, что если в папке много файлов - система начинает тормозить.
PM MAIL WWW ICQ Skype   Вверх
MoLeX
Дата 7.4.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Aliance, для каждого 1001 файла - новая папка


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Aliance
Дата 7.4.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Я же написал, что уже получил такие рекомендации. Ну а почему? Это действительно так?
PM MAIL WWW ICQ Skype   Вверх
gcc
Дата 7.4.2010, 11:52 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Aliance,  MogilefS  (распределенная файловая система)
размер фотографии? если маленькая то может в базу и отдавать как текст?

Это сообщение отредактировал(а) gcc - 7.4.2010, 11:56
PM WWW ICQ Skype GTalk Jabber   Вверх
Aliance
Дата 7.4.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



100.000 пользователей = 100.000 аватарок
плюс
100.000 товаров ~ 500.000 разных картинок товаров * 3 размера = 1.500.000 картинок

И тебе кажется что тут играет роль размер картинок?
PM MAIL WWW ICQ Skype   Вверх
MoLeX
Дата 7.4.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(gcc @  7.4.2010,  11:52 Найти цитируемый пост)
если маленькая то может в базу и отдавать как текст?

базу пожалей


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
gcc
Дата 7.4.2010, 12:03 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Aliance, как вы будите эти картинки отдавать из базы? попробуйте отдать файлик картинки в 10метров через mod_php и через nginx - должна быть разница smile а если маленькая, то можно, наверное, как текст, превиюшки, например...

можно написать плагин к nginx который будет отдавать из pgsql,mssql,oracle многопоточно работать с ними, я хотел написать, но что-то лень писать...  smile 

кстате, MogileFS по-моиму умеет c nginx работать на прямую, правда я не пробовал, но можно попробовать... ?



Это сообщение отредактировал(а) gcc - 7.4.2010, 12:20
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 7.4.2010, 12:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



MoLeX, я вот не много интересовался, там предназначено для чтения из базы файлов, но только куда и чем его отдавать? т.е. nginx обычную статику из файлов - будет же лучше на много...
(в MsSQL, Oracle даже есть встроенные типы данных для этого, там видео от туда можно смотреть, один знакомый писал такой софт для корпоративного хранилища какого-то)


пример из php.net:
Код

<?php
// --------- OPEN CONN ---

   $conn = pg_connect("host='127.0.0.1' dbname='test' user='usertest' password='passtest'");

// --------- OPEN FILE ---

   $fp = fopen('logo.gif', "r");
   $buffer = fread($fp, filesize('logo.gif'));
   fclose($fp);

// --------- CREATE - INSERT OID ---

   pg_exec($conn, "begin");

   $oid = pg_locreate($conn);

   $rs = pg_exec($conn,"INSERT INTO test(tipo, images) VALUES('A1', $oid);");
   $handle = pg_loopen ($conn, $oid, "w");

   pg_lowrite ($handle, $buffer);
   pg_loclose ($handle);

   pg_exec($conn, "commit");

// --------- OPEN - INSERT OID ---

   $rs = pg_exec($conn, "SELECT images FROM test WHERE tipo = 'A1';");
   $row = pg_fetch_row($rs, 0);

   pg_exec($conn, "begin");
   $loid = pg_loopen($conn, $row[0], "r");

   header("Content-type: image/gif");

   pg_loreadall($loid);
   pg_loclose($loid);

   pg_exec ($conn, "commit");

// --------- UNLINK OID ---

   pg_exec($conn, "begin");

   $loid = $row[0];
   pg_lounlink($conn, $loid);

   pg_exec ($conn, "commit");

// --------- DELETE OID ---

   pg_exec($conn, "DELETE FROM test WHERE tipo = 'A1';");

// --------- CLOSE CONN ---

   pg_close();
?>



Цитата

Example: Streaming character data from the database

In this example, we demonstrate a technique for streaming data from the database to a file handle, in this case STDOUT. This allows more data to be read in and written out than could be stored in memory at a given time.

my $lob_id = 17; # Arbitrary row identifier, for example

$sth = $dbh->prepare( <<" SQL", { ora_auto_lob => 0 } );
SELECT chardata
FROM lob_example
WHERE lob_id = ?
SQL
$sth->execute( $lob_id );
my ( $char_locator ) = $sth->fetchrow_array();

my $chunk_size = 1034; # Arbitrary chunk size, for example
my $offset = 1; # Offsets start at 1, not 0
while(1) {
my $data = $dbh->ora_lob_read( $char_locator, $offset, $chunk_size );
last unless length $data;
print STDOUT $data;
$offset += $chunk_size;
}

Notice that the select statement does not contain the phrase "FOR UPDATE". Because we are only reading from the LOB Locator returned, and not modifying the LOB it refers to, the select statement does not require the "FOR UPDATE" clause.

A word of catution when using the data retruned from an ora_lob_read in a condtional statement. for example if the code below;

while( my $data = $dbh->ora_lob_read( $char_locator, $offset, $chunk_size ) ) {
print STDOUT $data;
$offset += $chunk_size;
}

was used with a chunk size of 4096 against a blob that requires more than 1 chunk to return the data and the last chunk is one byte long and contains a zero (ASCII 48) you will miss this last byte as $data will contain 0 which PERL will see as false and not print it out.


Это сообщение отредактировал(а) gcc - 7.4.2010, 12:41
PM WWW ICQ Skype GTalk Jabber   Вверх
Fortop
Дата 7.4.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Aliance @  7.4.2010,  11:56 Найти цитируемый пост)
100.000 пользователей = 100.000 аватарок
плюс
100.000 товаров ~ 500.000 разных картинок товаров * 3 размера = 1.500.000 картинок

CDN

А советы хранить изображения в БД - в мусор.

Добавлено через 1 минуту и 31 секунду
Цитата(Aliance @  7.4.2010,  11:41 Найти цитируемый пост)
Ну а почему? Это действительно так? 

во-первых, это отчасти связано с клиентами FTP, они не показывают число файлов в папке, если их больше 1-2к

во-вторых, у разных файловых систем есть лимиты на число файлов в одном каталоге.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.