У меня есть несколько скриптов, которые обновляют записи mongoDb, которые выглядят так:
{ "_id" : "c12345", "arr" : [
{
"i" : 270099850,
"a" : 772,
},
{
"i" : 286855630,
"a" : 622,
}
] }
Скрипты добавляют элементы в массив «arr» объекта, используя «pushAll», который
работает отлично и очень быстро.
Мое требование :
1. Продолжайте изменять эти объекты, но обрабатывайте их, когда размер arr превышает 1000.
- Когда arr превышает 1000, я выбираю несколько важных записей, отбрасываю некоторые менее важные,
и откажитесь от некоторых старых и уменьшите размер arr до 500.
Текущая реализация :
1. Сценарий A берет некоторые данные откуда-то и находит объект в другой коллекции.
используя поле "_id", и добавляет эти данные в массив "arr".
- Тот же скрипт, когда находит элемент, проверяет размер "arr", если меньше 1000, он добавляет к arr нормальное значение, в противном случае переходит к обработке PHP-объекта, полученного через find, модифицирует его и обновляет монго запись с использованием «SET».
Текущие узкие места :
1. Я хочу, чтобы скрипт обновления работал очень быстро. Upserts быстрые, однако операции поиска и изменения медленнее для каждой записи.
Идеи на уме :
1. Вместо обработки элементов EXCEEDED в сценариях установите флаг bool в объекте и обработайте его с помощью отдельного сценария Data Cleaner. (но это также требует от меня НАЙТИ объект перед выполнением UPSERT).
- всегда поддерживает переменную COUNT в объекте, которая хранит текущую длину «arr», и использует ее в скрипте очистителя данных, который очищает все объекты, извлеченные через mongodb
query "count"> 1000. (Так как mongodb не позволяет оператору $ size иметь диапазоны, а в настоящее время имеет только равные условия, мне нужен собственный счетчик COUNT)
Любые другие чистые и эффективные идеи, которые вы можете предложить?
Спасибо.