bogofilter (фильтр спама) должен вести подсчет слов. Он использует dbm в качестве бэкэнда, так как ему требуется постоянное хранение слова -> счетная карта. Возможно, вы захотите взглянуть на код для вдохновения. Или нет, поскольку вам нужно реализовать часть db для школьного проекта, а не часть фильтра спама.
Минимизируйте количество погони за указателем. Операции загрузки памяти, зависящие от данных, выполняются медленно, особенно на большом рабочем наборе, где у вас будет кеш промахов. Поэтому убедитесь, что ваша хеш-таблица достаточно велика, чтобы вам не нужно было большое дерево в каждом ведре. И, возможно, проверьте, что ваши двоичные деревья являются плотными, а не вырожденными связанными списками, когда вы получаете более одного значения в хэш-корзину.
Если это медленно, профилируйте это, и посмотрите, является ли ваша проблема одной медленной функцией, или это пропускает кэш, или это неправильные предсказания ветвления.