Как вы связываете Java + PHP?

Собственно есть задача работать с довольно большим объемом статистики, который сейчас находится в БД postgresql. Сейчас там около 2 млн. записей с PK по text и обычно по нему идет поиск строки по полному совпадению. Пробовал varchar для скорости — вообще не оказалось разницы, char — дал незаметный прирост, и я отказался от него в пользу неограниченной длины поля и отсутствующих в конце пробелов.

Итог — запросы работают медленнее, чем хочется. Подумали над тем, чтобы держать их в памяти, но как-то стрёмно, если БД вдруг упадет. Кешировать в php такой объем — мне не думается нормальным.

Подумали над тем, чтобы использовать Java для HashMap для «быстрых» запросов к данным (пожалуйста давайте не начинать «почему не С/C++»), но как организовать быстрое общение php и java как-то не придумали. SOAP вероятно будет слишком медленно. Читал php-java-bridge.sourceforge.net/, но там тоже xml, хоть и быстрее SOAP.

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

Заранее благодарю всех, кто ответит как это возможно сделать.
  • Вопрос задан
  • 3234 просмотра
Пригласить эксперта
Ответы на вопрос 7
alekciy
@alekciy
Вёбных дел мастер
>Сейчас там около 2 млн. записей с PK по text и обычно по нему идет поиск строки по полному совпадению.
А каким образом добавление в систему нового компонента в виде Java решит проблему? На уровне СУБД точно нет проблем? EXPLAIN точно показал, что проблем нет?

Описано довольно туманно, но чисто рефлектор на фразах «много тестовых данных» и «поиск» сразу возникает Sphinx.
Ответ написан
blo
@blo
инженер-программист
Почему бы не использовать, например, memcache для кеширования данных их БД? И не надо будет ничего изобретать.
Ответ написан
Ogra
@Ogra
>Сейчас там около 2 млн. записей с PK по text и обычно по нему идет поиск строки по полному совпадению.

Почему бы не положить в БД, скажем, половинку md5 от этой строчки в BIGINT? Коллизий почти не будет. Индекс по целому уж точно будет быстро работать, да и реализовать такое быстрее, чем писать доп.компонент на Джаве, да еще и дружить их между собой.
Ответ написан
@shagguboy
сделайте хеш (MD5/CRC32/etc) от текста и проиндексируйте. и сначала искать по этому хешу а потом по оригиналу.
Ответ написан
@dborovikov
Соедините по http — проще не бывает. Для передачи объектов можно взять к примеру JSON.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы