Мы ищем базу данных NoSQL, в которой мы можем хранить более 100 миллионов записей со многими полями в Value, такими как наборы в Redis.
И база данных должна быть доступной для поиска по значению. Мы проверили Redis, но он не поддерживает ни одной опции поиска по значению. потому что у нас есть миллионы записей, и мы обновляем некоторые поля записей, а затем берем кучу записей, которые не обновлялись в определенное время.
Итак, запустите запрос ко всем записям, а затем проверьте, какие записи не обновляются с определенного времени, и это займет больше времени. Потому что в этих решениях мы обновляем 100-200 записей в минуту, а затем берем групповую запись на основе значения.
Итак, Redis здесь работать не будет. У нас есть возможность сохранить в MongoDB, но мы ищем базу данных ключ-значение, которая поддерживает функции поиска по значению.
{
"_id" : ObjectId("5ac72e522188c962d024d0cd"),
"itemId" : 11.0,
"url" : "http://www.testurl.com",
"failed" : 0.0,
"proxyProvider" : "Test",
"isLocked" : false,
"syncDurationInMinute" : 60.0,
"lastUpdatedTimeUTC" : "",
"nextUpdateTimeUTC" : "",
"targetCountry" : "US",
"requestContentType" : "JSON",
"group" : "US"
}
В Aerospike с каждой записью связаны метаданные времени последнего обновления, которые можно использовать для поиска с использованием фильтров предикатов, соответствующих вашему варианту использования. Вы также можете выполнять поиск на основе числовых или строковых значений в корзине с использованием вторичных индексов.
В Aerospike вы можете использовать фильтрация предикатов для поиска записей, которые не обновлялись с определенного момента времени, и возвращать только метаданные этой записи, которая включает дайджест записи (ее уникальный идентификатор). Вы можете обработать совпавшие дайджесты и выполнить все необходимые обновления. Этот тип фильтра предикатов работает очень быстро, потому что ему нужно только смотреть на запись первичный индекс, которая хранится в памяти. См. Примеры в репозитории Java-клиента.
Вам не нужно использовать здесь вторичный индекс, потому что вы хотите просканировать все записи в пространстве имен (или наборе этого пространства имен) и просто проверить часть метаданных «время последнего обновления» каждой записи. Поскольку вы будете возвращать только дайджест записи (уникальный идентификатор), а не какие-либо ее фактические данные, в этом сканировании никогда не потребуется читать что-либо с SSD. Это будет очень быстро и легко для результатов (опять же, обратно отправляются только метаданные). В клиенте вы перебираете набор результатов, создаете список идентификаторов, а затем действуете с ними с последующей записью.
Вторичный индекс и фильтр предикатов (aerospike.com/docs/guide/predicate.html) доступны в Aerospike и могут быть полезны для вашего варианта использования.