![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Kudzu |
|
|||
![]() Magnificus Picus ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 30.4.2008 Где: KLD Репутация: нет Всего: 1 |
Доброго времени суток, уважаемые винградовцы. Столкнулся проблемой и хотел бы послушать ваши идеи.
Имеем: Два массива ~30k элементов, сравниваем эти массивы,из полученного массива экстрактируем элементы в новый. В итоге: Операция занимает много времени, >80 секунд, что недопустимо. Варианты: 1) Поддерживать полученный массив в мемкеше, с блокировками и "протуханиями". 2) Разбить массивы на группы и работать с группами. 3) Некое подобие потоков с промежуточными результатами, которые также в мемкеш. Ваши варианты? Это сообщение отредактировал(а) Kudzu - 6.5.2008, 11:35 |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Использовать базу данных и оптимизировать алгоритм, чтобы он не требовал сравнения таких массивов.
|
|||
|
||||
| Kudzu |
|
|||
![]() Magnificus Picus ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 30.4.2008 Где: KLD Репутация: нет Всего: 1 |
БД и так называемое "промежуточное состояние" отпадает. Всё должно происходить очень быстро и работа происходит с большим массивом + есть лимиты на БД.
К сожалению, это единственный алгоритм(получили,получили,сравнили,получили) и поменять его не получится. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Из описания совершенно непонятно, как в результате "сравнения" получается какой-то новый массив. Т.е. самая главная часть алгоритма, которую наверняка и можно радикально оптимизировать, осталась за кадром. Можно о ней поподробнее? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Kudzu |
|
|||
![]() Magnificus Picus ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 30.4.2008 Где: KLD Репутация: нет Всего: 1 |
array_values(array_diff($array1,$array2)) |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Kudzu,
Лучше база, хоть SQLite, но база, все остальное это такие грабли.... Если коннектов будет больше 1-2, то серверу - такие сравнения не сильно понравятся. А на память лимитов нет? -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Ужос... Может, есть смысл flip-нуть массивы и воспользоваться array_diff_key? Хотя и это костыли, правильное решение подсказал Feldmarschall. -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
SelenIT, флипать 30 тыщ? те же грабли, вид в профиль
Я думаю, здесь мы наблюдаем типичную картину - имеется кривое решение, и тайное знание о том, что "мемкеш" спасает от всех проблем. Остается дождаться "специалиста", который оценит и полюбит |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |