У одного из моих проектов началась проблема роста. Что у нас есть в наличии?
MongoDB с 2 коллекциями – большой и поменьше – 50млн и 500к документов соответственно. При этом каждые сутки нужно мержить большую коллекцию и поменьше ибо малая коллекция собирается реалтайм по ночам и не представляется возможным собирать эти данные сразу в большую коллекцию.
Все бы ничего, но начались адовые тормоза I/O. Потребление памяти монги (внезапно?) стало очень маленьким (порядка 256Мб, что явно не норма).
Есть подозрения, что индекс (10Гб) во время перестройки просто не помещается в памяти (всего 12Гб памяти), т.к. сам граф будет явно намного больше.
Решил посоветоваться с умными людьми. Так уж исторически сложилось, что знакомых, шарящих в Mongo у меня не так много. Был выходной, удалось поймать Максима Каменкова (идея, что индекс не умещается в оперативке при перестройке, кстати, пришла именно ему).
В итоге было принято решение убрать индекс с текстового элемента, вместо этого добавить новый – хеш от этого самого элемента. Это на самом деле на порядок уменьшило размер индекса (новый индекс занимает около 2Гб). Кроме того, как выяснилось, есть еще специальный тип представления хеша в bson – bson.binary.MD5_SUBTYPE, который позволяет сохранить пространство на диске и нервы. Будем наблюдать за дальнейшим поведением монги ;)
Leave a Reply