2016-05-12 3 views
2

Мне нужна база данных на основе подписки, в которой у меня могут быть обратные вызовы при изменении данных (я буду использовать их только для моих тестов). Я использовал gunDB, и он работает только так:Основанная на подписке база данных nosql in-memory

var Gun = require('gun'); 
var key = 'something_long'; 
var state = { a: 1, b: 2 }; 
var gun1 = Gun(); 
var gun2 = Gun(); 

gun1.put(state).key(key); 

gun2.get(key).on(function(val) { 
    console.log('Value for gun2 (using ".on") is: '); 
    console.dir(val); 
}); 

Когда я поменять gun1.put и gun2.get он не работает. Это означает, что я не могу подписаться до тех пор, пока ключ не будет там. Этот пример не работает (обратный вызов никогда не вызывается):

var Gun = require('gun'); 
var key = 'something_long'; 
var state = { a: 1, b: 2 }; 
var gun1 = Gun(); 
var gun2 = Gun(); 

gun2.get(key).on(function(val) { 
    console.log('Value for gun2 (using ".on") is: '); 
    console.dir(val); 
}); 

gun1.put(state).key(key); 

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

Тот же самый пример работает firebase:

var Firebase = require('firebase'); 
var statesRef = new Firebase('https://******.firebaseio.com/states'); 
var statesRef2 = new Firebase('https://******.firebaseio.com/states'); 

var key = 'something_very_long'; 
var data = { a: 1, b: 2 }; 

statesRef2.on('value', function(dataSnapshot) { 
    console.dir(dataSnapshot.val()); 
}); 
statesRef.set({ key: key, state: data }); 
+0

Ive использует Reddis в прошлом в php, отлично работал! Вероятно, доступный в nodejs –

+0

@AndrewDonovan главный недостаток заключается в том, что вам нужно запустить сервер Redis. И я буду использовать его только для тестов, поэтому для меня это накладно. –

ответ

2

Создание отдельных/нескольких экземпляров GUN не является полезным или необходимым.

Все работает, если вы просто использовать 1 GUN экземпляр:

http://jsbin.com/yorujufofe/edit?js,console

Он также работает в NodeJS.

Объект, возвращаемый вам, является безопасным скопированным снимком, Мутирующий это НЕ будет влиять на состояние базы данных.

Надеюсь, это полезно.