Если есть возможность отказа от восстановления старых ревизий, то можно хранить скажем последних N-штук. Если так пугает число записей в БД, то почему не сделать в Вашей таблице другой тип связи, у Вас сейчас один ко многим, а сделать один к одному (по id), а всю историю изменений писать в args, с указанием action, уже непосредственно в args. Тут правда надо помнить о том, что длина полей тоже не бесконечна, и все вероятно не влезет.
Второй вариант — действительно, использовать NoSQL БД, например CouchDb ну или что-нибудь подобное, я думаю, что это будет даже самый правильный вариант.