Сильно-ли замедляется доступ к объектам словаря при большом количестве?
К примеру, есть словарь, в котором используются статусы функций во время исполнения программы, потенциально их может стать большое количество. Когда словарь почти пустой, то команда типа status.get(pid) выполняется мгновенно, но если объектов в словаре будет 100/1000/10000/... с какой скоростью будет осуществляться доступ и вообще будет-ли происходить замедление?
Если у ключей будет плохая хэш-функция (__hash__) — замедление будет сильное. Например, если все ключи будут отдавать хэш 42. Тогда открытая адресация просто умрёт, пытаясь найти очередную свободную ячейку в хэш-таблице.
В остальном, хоть 100, хоть 10000000 — неважно. Вероятность коллизии примерно одинаковая. И амортизированная сложность вставки/получения/удаления элемента — O(1)
Roman Kitaev, еще одно - раз в сутки скрипт перезапускается, соответственно status очищается. Пока что максимальное кол-во обращений было в районе 1500, соответственно и записей типа pid = {024635: 0} такое-же.
Roman Kitaev, ИМХО, судя по вопросам автора он делает что-то многопоточное с высокой скоростью записи. также понятно, что он новичок в питоне. поэтому, по моему мнению, ему проще и безопаснее будет освоить редис как хранилище. можете быть несогласным, это Ваше право.
Владимир, неа, многие вопросы от совершенно разных приложений.
В целом для приложения, для которого хотел "прикрутить" базу я пробовал redis, postgresql. Redis жрет много ОЗУ - был выкинут сразу, "объемные" sql запросы слишком сильно засоряли код, т.к. их было много, хотя в целом о postgresql лично для себя сделал только один вывод: "зачем?". Пробовал извращение типа tinydb - то-ли я дурак (это факт, но в случае tinydb возможно было исключение), то-ли tinydb хлама кусок: частенько происходила "кривая" запись в db.json, из-за чего он становился невалидным и все крашилось, за скорость работы, ввиду выключенного кэширования по определенным обстоятельствам, я вообще молчу - ниже, такое ощущение, быть она в принципе не может. Читал много хвалебных отзывов о mongo, мол тоже построен на концепции документов json - попробую, но не сейчас. В любом случае в приложении была полностью изменена логика - все теперь работает сугубо в динами, а выходные данные, которые прям очень нужно сохранить - записываю в csv.
Владимир, многопоточное как раз может юзать один пошареный словарь. Если бы у него было несколько процессов — другой вопрос. Хотя и там через менеджер можно получить пошаренный словарь. Но я бы не стал.