Это хорошая практика для создания кэша коллекции? - PullRequest
1 голос
/ 01 декабря 2011

Я сталкиваюсь с MongoDB с Node.js, используя плагин node-mongodb-native. Проблема, с которой я сталкиваюсь - это количество вложенных обратных вызовов. Я пытаюсь упростить несколько вещей, уменьшив код, необходимый для запроса.

Вместо этого ...

db.collection("test", function(err, collection) {
    collection.find(...).toArray(function(err, results) {
        // ...
    });
});

... Я думал о создании объекта, который действует как кэш коллекций, чтобы первый обратный вызов не был необходим. Я использую следующий код для создания объекта:

var collections = {};

["test", "foo"].forEach(function(name) {
    db.collection(name, function(err, coll) {
        collections[name] = coll;
    });
});

С его помощью я могу очистить первый фрагмент кода:

collections.test.find(...).toArray(function(err, results) {
    // ...
});

Мне было интересно, является ли это хорошей практикой. Это работает просто отлично, но я думаю, что обратный вызов для получения коллекции не без причины. Имеет ли смысл создавать кеш коллекций, как я делаю сейчас?

1 Ответ

2 голосов
/ 01 декабря 2011

Это полностью зависит от объекта коллекции.- Это живой?- Это связано с базой данных?- Есть ли внутреннее кэширование?- Отражают ли они новые данные?

Не зная этих подробностей, я рекомендую создать ленивый оценочный прокси.

Mongo.collection("test").find(...).toArray(function(err, results) {
    // ...
});

Идея заключается в том, что вы внутренне сохраняете команду поиска и при вызовеtoArray вы получаете коллекцию и вызываете для нее команду find, а затем вызываете toArray.

Это означает, что вы каждый раз получаете новую коллекцию и избегаете проблемы «надежного кэширования», но при этом у вас есть хороший API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...