SocFishing

SocFishing
Рейтинг
118
Регистрация
26.09.2013
Должность
null
Интересы
null
null

А что у вас srednee тип string. Вы строки сравниваете? О_о

Вроде все путём, на объекты переделать.

<?php

$data = [ [ 'vsego' => 88,
'srednee' => '68.08533996285745',
'rayon' => '11111'
],
[ 'vsego' => 77,
'srednee' => 68.185335745,
'rayon' => '222222'
],
[ 'vsego' => 66,
'srednee' => '60.9993996285745',
'rayon' => '333333'
]
];

function sortcall($a, $b) {
return ((float)$a['srednee'] < (float)$b['srednee']) ? -1 : 1;
}

usort($data, 'sortcall');

var_dump($data);

_SP_, автор игнорит вопрос про количество читаемых файлов. Файл 1 мб ерунда для одного чтения, такой можно целиком считать и провести все поиски меньше чем за секунду. А вот если таких файлов может быть 4000 под перебор верного, это вот вам и нагрузочка с вариацией 0.5 по 40 секунд. Как по мне, если идёт перебор, то вернее будет все это запихивать в базу данных и работать с ней. Ну и не вижу смысла создавать диск в памяти, зачем, когда можно загнать в память все данные или же использовать memcached с периодическим обновлением данных.

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

Corvus, скорость всё путём, SSD.

Вопрос остается открытым, как много скрипт открывает этих 1 мб файлов производящих поиск в рамках одного запроса. В среднем.

Много раз замечал, что не стоит ставить, если мало трафика на сайте. Для этого можно поставить какой-то другой трекер, который не относится к поисковым системам. ну и желательно не ставить библиотеки и шрифты от гугла и яндекса ;-)

amazon aws, scaleway почасовая плата

Corvus, это меняет дело

if ( $fp = fopen($filename,'r-') ) {

fseek($fp, $offset);

что такое "r-" вам нужно использовать ключ "r"

какой $offset насколько он велик

получается что для разной широты и долготы у вас разные значения на чтении, в зависимости от того, какой файл вы считываете и насколько offset идёте. Сделайте замеры в каком именно месте идет задержка. Эта функция чтения или что? сколько раз вызывается эта функция, может быть у вас перебор по всем этим мелким файлам?)

скидываем кеш файловой системы и тестируем скорость чтения диска

sudo /sbin/sysctl -w vm.drop_caches=3

dd if=tempfile of=/dev/null bs=1M count=1024

какое значение скорости это показало?

_SP_, тут не сказано, какие права запросит его авторизация. Она может запросить не только адрес вашей почты, имя, id и токен, но и запросив у вас права, которые могут вас скомпрометировать, например доступ к вашей стеночке и последующая публикация на ней вялого.

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

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

В случае же базы данных мы можем побить множество нужных кусков данных под индексы и обращаться к этим кускам быстро отталкиваясь от своих задач. Аналогия, равносильно предположим создать 1000000 файлов и название указать широту, внутри файла же будет вся информация по городам с этой широты. так мы можем быстро открыть файл имея значение широты. Потому как файловая система строит индекс по названию файла. Но кто в здравом уме будет создавать столько файлов и гемороится, когда можно намного быстрее и проще сделать это с базой данных. Это вам любой практикующий разработчик скажет, что вы плывёте в другое русло.

Автор написал про 9 гб данных и 4000 файлов. несложно посчитать размер каждого файла и потом с этого размера последовательное чтение да еще и с поиском нужного значения.

ArbNet, возьмите да сделайте, github открытый код, независимое хранилище в браузере, а не у вас в базе, которая может упасть или быть скомпрометирована.

Не пойдёт, взять так просто авторизации и у себя накапливать. Этим воспользуется только совершенно безграмотный разработчик.

еще выполнить

sudo sysctl -w fs.nr_open=500000

sudo sysctl -p

забыл упомянуть, что ulimit -n 32768 && ulimit -a нужно применить на том пользователе, под которым у вас запускается процесс. Например пользователь вебсервера www-data

перейти под пользователя sudo -u www-data sh

дальше ulimit -n 32768 && ulimit -a

exit

БД с индексами, скорее всего не даст вам никакого буста, если вам реально нужно содержимое этих файлов.

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

Всего: 1070