2015-05-19 5 views
2

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

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

Пара других точек, транзакции всегда добавляются в набор данных, и они никогда не выселяются. Кроме того, мы распределяем обработку путем разделения набора данных между рабочими на разных серверах.

В настоящее время система использует класс Java Collection для кэширования набора данных транзакций в памяти. Это связано главным образом с требованиями скорости, поскольку обеспечивает быстрый последовательный доступ к транзакциям.

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

+0

могут ли эти «вычислительные сравнения» сводиться к простым байтовым операциям? если да, то, может быть, вы могли бы просто сбросить их на диск и записать в память файлы в кусках? – the8472

+0

«работает в проблемах с количеством/размером транзакций и сборкой мусора JVM», что это значит? Если GC собирает ваши объекты, то в моем определении нет ссылок на них –

+0

Является ли это проблемой кэширования (выселения) или распределенного вычисления (латентности)? Это звучит как последнее, где вы находитесь на куче хранения для скорости, но вызывает давление в ГК. В зависимости от ваших вычислений вы можете перейти во встроенную базу данных (используя предварительную выборку), двоичные вычисления вне кучи, предварительно вычисленные индексы и т. Д. Если вычисление не является действительно O (n), тогда у вас могут быть решения для моделирования. Хороший ответ требует более подробных сведений. –

ответ

0

Переосмыслить колесо настолько заманчиво! Когда у Oracle есть база данных памяти, почему мы не можем сделать то же самое ... Позвольте мне попробовать. Как насчет массива хэширования байтов и сохранить эти хэши? И когда происходит столкновение хэшей, перейдите в настоящую базу данных и дважды проверьте весь массив. Так заманчиво ...

+0

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

+0

Пожалуйста, объясните. Вот мои мысли. Каждая транзакция уникальна массивом байтов. О каких расчетах вы говорите? Как создать этот массив? Массив не должен меняться. Или это? В этом случае возможно, что каким-то образом записи могут измениться, а не быть уникальными. – Alex

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