rtyug

rtyug
Рейтинг
263
Регистрация
13.05.2009
Должность
perl,php,sql,javascript(jquery),freebsd/linux
Интересы
perl,php,sql,javascript(jquery),freebsd/linux
https://minfin.com.ua/blogs/94589307/115366/

frantic, на счет стримминга, то для видео и т.д. я пример привел

nginx - картинки отдаст быстрее, лучше чем отдавать с базы....

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

и если картинки в базе будут более 100-150kб, а 1М примерно, то для СУБД тоже будет не красиво...

я видел некоторые хранят превиюшки по 5-30кб в MySQL (как обычный текст)

не знаю, почему, я бы все таки сделал в файлах... :)

на сколько я знаю, то максимальное ограничение файлов (и каталогов) в одном каталоге за которой ОС будет притормажить составляет около 2 млн файлов (точно не помню)... (а в вашем лучае только 60 тыщ)

можно взять сервер, и поставить распределенную файловую систему... MogileFS (http://www.google.com.ua/#hl=uk&q=mogilefs+freebsd&meta=&aq=0&aqi=g1&aql=&oq=MogileFS+f&gs_rfai=&fp=a1e4a221592c4a20)

в Oracle и MsSQL можно даже видео клипы смотреть из базы :D

есть втроенные типы STREAM

в MySQL почему-то не включили такой тип, хотя в PgSQL вроде бы есть минимальная возможонсть такая с функцией seek из BLOB

(но я не пробовал)

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.

http://search.cpan.org/~pythian/DBD-Oracle-1.23/Oracle.pm#Example:_Streaming_character_data_from_the_database

dima yurgensen, видно как вы хотите решить свою проблему...

закажите лучше уже чтобы кто-то сделал, например bearman

в Белоруссии полностью запретили :)

пример на Украине - только идиоты могли придумать такие законы...

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

(можете изменить их как хотите...)


<?php
function table($nameArray){
GLOBAL $_POST, $_GET;
if (isset($_POST['page'])) {
$page = intval($_POST['page']);
} else if (isset($_GET['page'])) {
$page = intval($_GET['page']);
} else {
$page = 1;
}
if ($page == 0) {
$page = 1;
}
$st = 3; // количество столбцов
$maxRecords = 3; // Количество записей на страницу
$allRecords = sizeof($nameArray);
$maxPages = floor(($allRecords / $maxRecords) / $st); // Добавляем $st, т.к. вывод идёт еще и колоночно, а если обычно, то не нужно
if ($page == 1) {
$start = 0;
$finish = $maxRecords;
} else {
$start = ($page * $maxRecords) - $maxRecords;
$finish = $page * $maxRecords;
}
//echo $page."<br>";
//echo $allRecords."<br>";
//echo $start."<br>";
//echo $finish."<br>";
$a = "<table border=0 width= '100%' align='center'>";
for($i = $start; $i < $finish; $i++){
$a .= "<tr>";
for($j = 0;$j < $st; $j++){
$a .= (isset( $nameArray[(($i*$st)+$j)]))? "<td>".$nameArray[(($i * $st)+$j)]."</td>": '';
}
$a .= "</tr>";
}
$a .= "</table>";
echo $a;
echo "<center>";
if (($allRecords % $maxRecords) != 0) {
$maxPages++;
}
if ($page != 1) {
echo " <a href=\"".$_SERVER['PHP_SELF']."?page=1\">&lt;&lt;</a> ";
}
if ($page == 1) {
echo " &lt;&lt; ";
}
if ($page >= 3) {
echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page - 2)."\">".($page - 2)."</a> ";
}
if ($page != 1) {
echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page - 1)."\">".($page - 1)."</a> ";
}
echo " ".$page." ";
if ($page < $maxPages) {
echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page + 1)."\">".($page + 1)."</a> ";
}
if (($page + 1) < $maxPages) {
echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page + 2)."\">".($page + 2)."</a> ";
}
if ($page != $maxPages) {
echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".$maxPages."\">&gt;&gt;</a> ";
}
if ($page == $maxPages) {
echo " &gt;&gt; ";
}
echo "</center>";
}
?>

вот который сейчас:


sub build_pages {
my $self = shift;
my ( $url, $count, $cuttent_page, $url_panel, $max_page, $class_id ) = @_;

my ( $count_limit, $page );

$max_page ||= '10';

# $count ||= 0;

$cuttent_page = 0 if ($count == 0);

$cuttent_page = $cuttent_page || '';

my $total_pages = ceil( $count / $max_page );

$count_limit = 0;

if ( ( $cuttent_page eq 'end' && $total_pages > 0 )
|| ( $cuttent_page =~ /^\d+$/ && $cuttent_page > $total_pages ) )
{
# print '11 '.$total_pages ;
$cuttent_page = $total_pages;

}

if ( $cuttent_page =~ /^\d+$/ ) {
$count_limit = ( $cuttent_page - 1 ) * $max_page;
}

$cuttent_page = 1 if ( $cuttent_page !~ /^\d+$/ );

$class_id = $class_id ? "class='".$class_id."'" : '';



my $page_number;
my $i;
for ( $i = 0 ; $i < $total_pages ; $i++ ) {

$page_number++;
last if ( $total_pages <= 1 );

next if ( $page_number > $cuttent_page + 4 );
next if ( $page_number < $cuttent_page - 4 );

if ( $page_number > $cuttent_page + 3 ) {

$page .=
' <a '.$class_id.' href="'
. $url . ''
. $total_pages . ''
. ( $url_panel || '' )
. '"> | ... '
. $total_pages
. ' | </a>';

next;
}

if ( $page_number < $cuttent_page - 3 ) {

$page .=
' <a '.$class_id.' href="'
. $url . ''
. $page_number . ''
. ( $url_panel || '' )
. '"> | 1... | </a>';

next;
}

if ( $page_number != $cuttent_page ) {

$page .=
' <a '.$class_id.' href="'
. $url . ''
. $page_number . ''
. ( $url_panel || '' ) . '"> | '
. $page_number
. ' | </a>';
}
else {

$page .=
' <a '.$class_id.' href="'
. $url . ''
. $page_number . ''
. ( $url_panel || '' )
. '"> | <b>'
. $page_number
. '</b> |</a>';

}
}

return ( $count_limit, $page, $max_page );

}


my ( $count_limit, $page, $max_page ) = $c->model('DBI')->build_pages( $url, $count, $id_page, $max_line || undef);
# $max_line - default 10

====

еще другой:


#!perl
use HTML::Template;
use CGI qw(:standard);
# имитация загрузки данных из базы
my %data = map { $_, {id => $_, data => time ^ $_} } 0 .. 42;
my $total_data = scalar keys %data;
# позволим пользователю выбирать кол-во записей на страницу (можно в куки засунуть)
my $default_per_page = 20;
my $per_page = int url_param('per_page') || $default_per_page;
my $offset = int url_param('offset') || 0;
# вывести последнюю страницу, на случай, если у кого ручки шаловливые окажутся)
$per_page = $default_per_page if $per_page > $total_data;
$offset = $total_data - $per_page if $offset > $total_data;
# сюда будут выбраны записи для отображения (от текущего смещения до текущеего смещения + кол-во записей на страницу)
my $tmpl_data = [];
for($offset .. $offset + $per_page) {
last unless defined $data{$_}; # на случай, если записей осталось меньше, чем выводится на страницу
push @$tmpl_data, delete $data{$_}
}
# признак наличия следующей страницы: текущее смещение + кол-во записей на страницу должно быть меньше общего кол-ва записей
my $has_next = ($offset + $per_page) < $total_data;
my $next_page = $has_next ? $offset + $per_page : '';
# признак наличия предыдущей страницы: смещение больше нуля (т.е. мы не в начале)
my $has_prev = $offset > 0;
my $prev_page = $has_prev ? $offset - $per_page : '';
# запишем сюда все страницы для того, чтобы можно было перескакивать на любую страницу
# page - номер страницы (+1 для того, чтобы нумерация не начиналась с нуля)
# offset = кол-во записей на страницу * на номер текущей страницы
# per_page надо указывать для того, чтобы сохранялось нестандартное значение
my $all_pages = [ map +{page => $_+1, offset => $per_page*$_, per_page => $per_page},
0 .. int($total_data / $per_page) # кол-во страниц = общее число записей / кол-во записей на страницу
];
my $tmpl = HTML::Template->new(filename => 'pager.html');
$tmpl->param(
tmpl_data => $tmpl_data,
all_pages => $all_pages,
has_next => $has_next,
next_page => $next_page,
has_prev => $has_prev,
prev_page => $prev_page,
per_page => $per_page,
);
print header(), $tmpl->output


<html>
<body>
<table border="1">
<TMPL_LOOP NAME="tmpl_data">
<tr>
<td><TMPL_VAR NAME="id"></td>
<td><TMPL_VAR NAME="data"></td>
</tr>
</TMPL_LOOP>
</table>
<br>
<TMPL_IF NAME="has_prev">
<a href='?offset=<TMPL_VAR NAME="prev_page">&per_page=<TMPL_VAR NAME="per_page">'>&lt;&lt;&nbsp;Previous</a>&nbsp;
</TMPL_IF>
<TMPL_LOOP NAME="all_pages">
<a href='?offset=<TMPL_VAR NAME="offset">&per_page=<TMPL_VAR NAME="per_page">'><TMPL_VAR NAME="page"></a>
</TMPL_LOOP>
<TMPL_IF NAME="has_next">
&nbsp;<a href='?offset=<TMPL_VAR NAME="next_page">&per_page=<TMPL_VAR NAME="per_page">'>Next&nbsp;&gt;&gt;</a>
</TMPL_IF>
</body>
</html>
Privod:
imho-no,
Уважаемый, я не знаю насколько часто Вы пьете пиво и где, Вы наверно не прочитали внимательно мой пост, пиво пить можно, но в бумажном пакете, как Вы думаете насколько это поможет бороться с пьянством? Лично я думаю что это просто увеличит количество мусора на улицах а так же прибыль у производителей бумажных пакетов.

никто так и не подтвержил и не опровергнул:

1) так можно пить безалкогольное пиво на улице?

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

я это не видел нигде, я это как раз сейчас хотел сделать :)

в принципе не сверх сложно, так средненько, просто геморойно с sql запросами, jquery и т.д.

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

...просто стремно если бобик приедит :) если выйдишь раз в год выпить пиво :)

я не люблю сидеть в тупой компании где куча народа, лучше вообще не буду пить и курить!!!

Игорь ( Родной Портал):

Безалкогольное, как раз и нельзя, прочитайте поправку в законе для rtyug -ов. :)))

где эта поправка?

автор топика, написал что пиво продают без этикетки сейчас в Киеве....

и в новостях везде за 28 число написано что можно безалкогольное...

http://www.google.com.ua/#hl=uk&q=%D0%BF%D0%B8%D1%82%D1%8C+%D0%BF%D0%B8%D0%B2%D0%BE+%D0%B2+%D1%83%D0%BA%D1%80%D0%B0%D0%B8%D0%BD%D0%B5+%D0%BF%D0%BE%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D1%83+%D0%B2+%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D0%B5&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=a1e4a221592c4a20

коротко:

"Стаття 15-2. Обмеження щодо споживання пива (крім
безалкогольного), алкогольних, слабоалкогольних
напоїв та тютюнових виробів

Забороняється споживання пива (крім безалкогольного),
алкогольних та слабоалкогольних напоїв:

1) у закладах охорони здоров'я;

полностью:

"Стаття 15-2. Обмеження щодо споживання пива (крім
безалкогольного), алкогольних, слабоалкогольних
напоїв та тютюнових виробів

Забороняється споживання пива (крім безалкогольного),
алкогольних та слабоалкогольних напоїв:

1) у закладах охорони здоров'я;

2) у навчальних та освітньо-виховних закладах;

3) у громадському транспорті (включаючи транспорт
міжнародного сполучення), на зупинках транспорту, у підземних
переходах;

4) у закладах культури;

5) у закритих спортивних спорудах (крім пива у пластиковій
тарі);

6) у ліфтах і таксофонах;

7) на дитячих майданчиках;

8) на спортивних майданчиках;

9) у приміщеннях органів державної влади та органів місцевого
самоврядування, інших державних установ.

Забороняється куріння тютюнових виробів:

1) у ліфтах і таксофонах;

2) у закладах охорони здоров'я;

3) у навчальних та освітньо-виховних закладах;

4) на дитячих майданчиках;

5) на спортивних майданчиках;

6) у під'їздах жилих будинків;

7) у підземних переходах;

8) у громадському транспорті (включаючи транспорт
міжнародного сполучення).

Забороняється, крім спеціально відведених для цього місць,
куріння тютюнових виробів:

1) у закладах громадського харчування;

2) у приміщеннях органів державної влади та органів місцевого
самоврядування, інших державних установ;

3) у приміщеннях закладів культури;

4) у приміщеннях закритих спортивних споруд;

5) у приміщеннях підприємств, установ та організацій всіх
форм власності.

У місцях та закладах, де куріння заборонено, має бути
розміщена наочна інформація, яка складається із графічного знака
про заборону куріння та тексту такого змісту: "Куріння
заборонено!".

У спеціально відведених для куріння місцях розміщується
наочна інформація, яка складається із відповідного графічного
знака та тексту такого змісту: "Місце для куріння. Куріння шкодить
Вашому здоров'ю!".

У закладах громадського харчування відводиться не менше
50 відсотків площі торгових залів таких закладів для
обслуговування осіб, які не курять.

Власник або уповноважені ним особи чи орендарі відповідних
споруд, окремих приміщень зобов'язані відвести спеціальні місця
для куріння, обладнані витяжною вентиляцією чи іншими засобами для
видалення тютюнового диму, а також розмістити наочну інформацію
про розташування таких місць та про шкоду, яку завдає здоров'ю
людини куріння тютюнових виробів.

У місцях для куріння має бути розміщено прямокутний графічний
знак із текстом такого змісту: "Місце для куріння" та інформація
про шкоду, яку завдає здоров'ю людини куріння тютюнових виробів,
із текстом такого змісту: "Куріння шкодить Вашому здоров'ю!".

На час проведення масових заходів сільські, селищні та міські
ради в межах відповідної адміністративної території можуть
заборонити або обмежити споживання пива (крім пива у пластиковій
тарі), алкогольних, слабоалкогольних напоїв та куріння тютюнових
виробів";

6) у статті 15-3:

назву викласти в такій редакції:

Товарищи, так безалкогольное пиво можно же пить везде?

вы покупаете бутылку, выливаете все в большой пластиковый стакан и пьете...?

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

безалкогольное пиво на вкус такое же не много горькое...

Всего: 2062