У одного из моих проектов началась проблема роста. Что у нас есть в наличии?

MongoDB с 2 коллекциями – большой и поменьше – 50млн и 500к документов соответственно. При этом каждые сутки нужно мержить большую коллекцию и поменьше ибо малая коллекция собирается реалтайм по ночам и не представляется возможным собирать эти данные сразу в большую коллекцию.

Все бы ничего, но начались адовые тормоза I/O. Потребление памяти монги (внезапно?) стало очень маленьким (порядка 256Мб, что явно не норма).

Есть подозрения, что индекс (10Гб) во время перестройки просто не помещается в памяти (всего 12Гб памяти), т.к. сам граф будет явно намного больше.

Решил посоветоваться с умными людьми. Так уж исторически сложилось, что знакомых, шарящих в Mongo у меня не так много. Был выходной, удалось поймать Максима Каменкова (идея, что индекс не умещается в оперативке при перестройке, кстати, пришла именно ему).

В итоге было принято решение убрать индекс с текстового элемента, вместо этого добавить новый – хеш от этого самого элемента. Это на самом деле на порядок уменьшило размер индекса (новый индекс занимает около 2Гб). Кроме того, как выяснилось, есть еще специальный тип представления хеша в bson – bson.binary.MD5_SUBTYPE, который позволяет сохранить пространство на диске и нервы. Будем наблюдать за дальнейшим поведением монги ;)