За последние 24 часа нас посетили 17627 программистов и 1649 роботов. Сейчас ищет 941 программист ...

выборка ближайших объектов

Тема в разделе "PHP для новичков", создана пользователем vikrorpert, 11 сен 2016.

  1. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    прочел "простыню" но слабо понял
    вроде бы русский язык знаю но смысл плохо доходит
    понял что желательно вынести в пхп,но опять же процу прийдется считать влюбом случае, да и логичнее же сортировать в базе потому что базы изначально заточены на сортировку
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    База масштабируется тоже.
    Кеш не используется для копирования в него базы, кеш нужен для хранения промежуточных горячих данных.
    Например, если взять запрос на поиск близлежащих объектов, задать шаг точки отсчета (не точка - точка, а "центр квадрата в который входит точка отсчета" - точка) и применить к Москве, то центр попадет в горячие данные, окраины - нет. Регулируя размер кеша можно подобрать оптимальное соотношение между затраченной памятью и скоростью отклика.
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это никак не отменяет моего тезиса о том, что ее процессорное время нецелесообразно тратить на обработку данных.
    База - это модель. Обработка - это задача контроллера.
    А никто и не спорит. Но данные эти должны быть не уникальными для каждого вызова, а общими для N вызовов. Достаточно общие, чтобы их выгрузка в кэш имела смысл для прироста производительности. Часто используемые данные всегда "горячие", те, что используются реже - со временем могут остывать и протухать. И да, он может хранить в себе не чистые данные из БД, а результаты выборок, если эта выборка пользуется спросом, а всякие соцсети так вообще хранят там и пользовательские выборки, которые дешевле хранить так, чем тянуть из БД, как, например, френдленту, я в курсе насчет всего этого. Но если выборка уникальна не только для каждого пользователя, но и чуть ли не на каждый запрос - кэш будет бесполезен. Он будет вечно полон заведомой тухлятиной, у которой единственный путь - на выброс.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Пока в order by
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хз хз, я б по возможности избегал этого.
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Отменяет. Может это и не очевидно для жертв PHP и ActiveRecord (на что намекает это ваше безграмотное "база - это модель"), но база предназначена для хранения и обработки данных. Как минимум - для уменьшения передаваемого датасета. Ты же предлагаешь выбрать огромную пачку данных (что уже может быть медленнее, чем выборка по индексу), сериализовать, передать по сети, десериализовать, обработать... о, да... такая экономия процессора.
    Ты споришь предлагая все необработанные данные выдрать из базы и загнать в кеш, а что бы потом выбирать все эти данные из кеша.
    Конкретный кейс, который обсуждается, а не сферические горячие данные в абстрактном кеше.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нет, у него там надо выбрать всего два числа. Долготу и широту. И передать их для обработки на сервер, вместо того, чтобы жевать их на стороне БД. В данном случае я пляшу от конкретной задачи. И эта задача легко разделяется на логические сущности.
    А вот теперь, чтобы быть правым любой ценой ты начал скатываться в демагогию и присваивать мне тезисы, которые я не выдавал, с тем, чтобы победоносно их опровергнуть. Не надо так делать. Либо тут ошибка понимания, исходящая из того, что ты прочитал то, что я написал по-диагонали. Уж чем чем, а косноязычием я не страдаю. И многозначно стараюсь не выражаться.

    Не было ни слова про "надо все необработанные данные выдрать и загнать в кэш". Было сказано лишь про то, что в случае, если из базы выбирать только широту и долготу объектов, кэш получится прикрутить и он будет прогреваться без проблем. Если же БД будет выдавать уникальные одноразовые конечные результаты, то добавить системе быстродействия, в будущем, за счет кэша, при такой архитектуре не получится. И, по возможности, лучше учесть это уже сейчас.

    А ты прочитал то, что не было написано, просто потому, что не способен не спорить. Я ни разу не видел, чтобы ты не спорил. Спорил ради спора. Это не круто.
     
  8. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Какие два числа? В базе 10000 объектов. Задача - найти 10 ближайших в радиусе 5 км.
    Ты предлагаешь передать все 10000 объектов (ок, их id и координаты) на клиент (PHP), что бы там на ПХП найти искомое, да еще все эти 10000 выдранного положить в кеш.
    Я правильно понял твое предложение?
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Парни, лень тему читать. Предложение использовать готовые координатные хранилища в СУБД уже было?
     
  10. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Нельзя, это тратит процессор базы данных.
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нет. Я предложил вполне прямым текстом выбирать из этих 10к объектов те, что находятся от пользователя в квадрате NхN градусов. И сортировать по расстоянию уже на сервере. Эти вот объекты можно складывать в кэш. И те, что чаще востребованы, будут забираться оттуда. А те, что нет, с базы. А на стороне сервера уже делать все, что захочется.

    Снова демагогия. Это не было сказано. Это первый страйк. После третьего Родент, в свое время, улетел, не обещав вернуться.
    --- Добавлено ---
    Геометри, поинты и полигоны? Если да, то было. Или ты о чем-то другом?
     
  12. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    В чем тогда смысл складывать в кеш если ключом будет позиция, которая может быть какая угодно? Получить засранный кеш с потоком miss-ов? Зачем был предложен кеш? Почему нельзя кешировать уже отсортированные данные, что много лучше?
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В том и дело, что она не может быть какая угодно. Она статична. Например, координата какого-нибудь кафе. Она не меняется от запроса к запросу. Или ты про позицию пользователя? Ну так а зачем делать ее ключом, если можно делать ключом широту и долготу? Скорее всего, правда, придется хранить двойной набор данных, но это уже другая история.
    А эти данные как раз меняются от запроса к запросу, потому что выборка делается в радиусе от точки, в которой находится пользователь. И каждая выборка уникальна не только для конкретного пользователя, но и для конкретного запроса.

    Об этом я и толковал.
     
  14. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Что ты хочешь кешировать? Объекты, которые нужно выдать пользователю с ключом - координатой этого объекта? С какой целю ты собираешься использовать этот кеш?
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я вообще не собираюсь ничего нигде хранить, Миксер. Я просто привел пример, как перенос бизнес-логики на сторону хранилища может в будущем стать проблемой, если между данными и этой логикой нужно будет что-то добавить, например слой кэша.
     
  16. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Я не вижу проблемы и не понимаю, где ты ее увидел, какой вариант кеширования приведет к тому, что этому будет мешать расчет расстояния на стороне базы. Объясни подробнее.
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я уже несколько раз же написал. Посмотри, какой запрос у @vikrorpert используется. Он возвращает не объекты, а посчитанные с них значения. То есть он выбирает пачку, потом ее гонит через формулы, и то, что получилось, отдает клиенту.

    В итоге каждый запрос возвращает набор данных, актуальных только здесь и сейчас в этой точке пространства. В 100 метрах, БД уже будет возвращать совсем другие данные.

    Протухаемость этих данных будет просто феноминальная.
    И кэшировать их нет никакого смысла.

    Разве что...можно сделать оптимизацию и считать не от позиции клиента, а от квадрата, в котором он находится. Нарезать для себя карту города, скажем, на равные сектора. Проверять вхождение пользователя в сектор, после чего делать выборку, относительно этого сектора и/или смежных, если надо. Тогда действительно будет профит от кэширования уже посчитанных данных, потому как ключом будет квадрат, охватывающий разом определенную площадь, внутри которой выборка всегда будет актуальна, но посчитанные данные, разумеется, не будут иметь точность "до метра".
     
  18. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Извини, не понимаю. Ты сам предлагаешь выбирать объекты рядом с пользователем по его точке из базы. Но расстояние для сортировки считать не в базе, а на клиенте. И говоришь:
    Т.е. если у нас расчет расстояния на клиенте (пхп) - то с кешом все будет ок. Если в базе - все плохо.
    Вот я и спрашиваю, как это с кешом все будет хорошо при расчете на клиенте, если выборка все-равно по координате человека и...
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на прошлой неделе ганзал психует, сегодня - миксир. Че с вами?
    --- Добавлено ---
    я тоже так предлагаю :D
     
  20. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    А я не вижу никакой разницы. Возможно(!) есть какие-то конкретные(!) кейсы в каком-то легаси коде, где удобнее считать на пхп или на стороне базы. Но эти решения не имеют никакого отношения к "программерской логике", ни к "масштабированию", ни к "кешированию". А когда человек не просто бредит, но и вываливает этот бред на новичков - я буду встревать.
    А не нравится, могу дать повод.
    Не знаю кто там такой Родент, но мне глубоко поxуй (вот повод, что бы не мучились) на твои угрозы, я потерю не замечу. А форуму еще +10 к рассаднику говнокодерского мракобесия будет.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да, вот отличный кейс сейчас: у него скорее всего немного объектов, и он крайне хреново врубается в программирование. Вполне себе отличное решение на коленке, которое понятно.
     
  22. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Под этот кейс прекрасно подходит и расчет дистанции на стороне базы.
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    подходит, но мне кажется что в данном случае ему было бы проще воевать в пхп.
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я уже внес выше корректировку в схему, которая даже твой вариант и твою логику учитывает. Но ты ее прокинул, потому что из согласия не получится срач, и продолжаешь атаку на уже отброшенную ветку измышлений. Демагогия. Второй страйк.
     
  25. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    у суриката бомбит)