Это проблема часто обновляемой структуры подсловаря. Компромисс между CPU и IO.
В памяти есть вложенная структура данных dict. Код 1:
domain={}
domain["www.xx.com"]={}
domain["www.xx.com"]["192.105.0.1"]={}
domain["www.xx.com"]["192.105.0.1"]["TTLS"]=Set([20,80,3000])
domain["www.xx.com"]["192.105.0.1"]["FIRST_SEEM"]=1379484935.460281
domain["www.xx.com"]["192.105.0.1"]["LAST_SEEN"]=1379484945.46077
domain["www.xx.com"]["192.105.0.2"]={}
domain["www.xx.com"]["192.105.0.2"]["TTLS"]=Set([70,90,2000])
domain["www.xx.com"]["192.105.0.2"]["FIRST_SEEM"]=13794674935.460281
domain["www.xx.com"]["192.105.0.2"]["LAST_SEEN"]=1379674945.46077
Затем сериализуйте часть Set. Код 2:
domain["www.xx.com"]["192.105.0.1"]["TTLS"]=list(domain["www.xx.com"]["192.105.0.1"]["TTLS"])
domain["www.xx.com"]["192.105.0.2"]["TTLS"]=list(domain["www.xx.com"]["192.105.0.2"]["TTLS"])
Затем выгрузите эту структуру в mongodb, например, код 3:
db.myCollection.insert({"_id":"www.xx.com", "IPS":json.dumps(domain["www.xx.com"])})
Товар часто обновляется. Настал новый день, программа сгенерирует в памяти новый элемент dict о «www.xx.com», затем обновит этот элемент прежней информацией в mongodb. да, наоборот, для более простого обновления монго. Здесь загрузка json возвращает словарь, точно такой же, как и тот, который был сброшен (кроме набора). Код 4
mongo_dict=json.loads(db.myCollection.find_one({"_id":"www.xx.com"}))
update_domain_with_mongo_dict(mongo_dict)
Итак, в конце этого дня программа просто сбрасывает всю память домена ["www.xx.com"] на монго. это экономит работу по обновлению документа, упрощает ввод-вывод, оставляя грязную работу программе python. (Я читал много жалоб на плохую возможность обновления поддокументов в монго.) Код 5
db.myCollection.update({"_id":"www.xx.com"},{"$set":{"IPS":json.dumps(domain["www.xx.com"])}})
Однако, похоже, многим обновление бессмысленно. Даже если обновление не происходит или происходит небольшое обновление, программе придется восстановить элемент dict в mongodb. Относительно этого, IO слишком большой. Вот проблема, мне нужно обновить поддокумент отдельно, со многими циклами for и проверкой новых обновлений. Итак, json сбрасывает/загружает, до свидания.
тогда уточненный объект mongo и коды могут выглядеть так: Код 6
{
"_id":"www.xx.com"
"IPS":[
{
"IP":"192.168.0.1"
"TTLS":[20, 80, 3000]
"FIRST_SEEN":1379484935.460281
"LAST_SEEN":1379484945.46077
}
{
"IP":"192.168.0.2"
"TTLS":[70, 90, 2000]
"FIRST_SEEN":13794674935.460281
"LAST_SEEN":1379674945.46077
}
]
}
db.update({"_id":"www.xx.com"}, 'IPS'.0.'FIRST_SEEN':1379674945.46077)
однако для этого типа обновления требуется индекс «0», это определяется ключом: ip. В этой структуре я отказываюсь от дампов/загрузок json, что означает отказ от dict. Чтобы получить индекс, цикл for неизбежен. Это может сэкономить ввод-вывод, но ЦП будет плакать.
Итак, ребята, вы слишком много читали, каков ваш выбор? любое фантастическое решение, удивите меня. Дайте мне знать, если я что-то пропущу. Спасибо.