2012-03-13 1 views
-1

У нас есть алгоритм, который сравнивает объекты ruby ​​от MongoDB. Большая часть времени, потраченная, принимает результаты (~ 1000), присваивая им вес и сравнивая их с базовым объектом. Этот процесс занимает ~ 2 сек для 1000 объектов. Затем мы заказываем объекты по весу и принимаем верхние 10.Рубин Обработка объектов

Учитывая, что количество начальных матчей будет продолжать расти, я ищу более эффективные способы сравнения и сортировки совпадений в Ruby.

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

+2

Вы правы, это совершенно неясно. –

+0

Какой именно процесс сравнения вы используете в настоящее время? – kclair

+0

Сравнение между наборами массивов, которые содержат строки для каждого пользователя. В основном выясните, сколько элементов они имеют для каждого массива, и в целом имеется 5 сравнений с массивами. – user577808

ответ

1

Рассматривали ли вы хранение/кеширование веса? Это хорошо работает, если вес зависит только от атрибутов каждого пользователя, а не от значений, внешних для этого пользователя.

Кроме того, насколько сложным является расчет, связанный с весом, связанным с пользователем и «базовым» пользователем? Если это сложно, вы можете рассмотреть возможность использования базы данных графа, которая может хранить данные, которые являются специфическими для отношения между двумя узлами/объектами.

+0

Хорошая точка. Сравнение между различными массивами, связанными с каждым пользователем. Они меняются, но не тонны. Так что, например, UserA имеет соединения = [....], а UserB имеет соединения = [...]. В массиве соединений есть только идентификаторы строк. Таким образом, он сравнит 2 и узнает, сколько соединений у них общего. Как я уже упоминал, соединения обновляются каждую ночь, но они, вероятно, не меняют LOT. – user577808

Смежные вопросы