2013-08-26 1 views
1
сценария

Ну как это:Neo4j и Php ручка счетчика в транзакции

создать один узел с именем counter node. Его начальное значение равно 0 и увеличивается по мере того, как пользователь создает свою учетную запись на моем веб-сайте.

Итак, есть три операции произойдет действовать следующим образом:

Чтение counter node значение
ли какая-то логика в PHP. Вот как +1 к предыдущему значению счетчика узла
Написать новое значение счетчика узла

Теперь проблема, если два или больше пользователей приходят точно то же самое время и создание таких условий, которые

Перед первым пользователем записи новое значение для счетчика узла, оно считывается вторым пользователем. Таким образом, это оставит значение моего «счетного узла» в неустойчивом состоянии.

Надеется, что вы получили то, что я имел в виду ..

Любого решение ??

Я использую Neo4j 1.9.5 и PHP

Php Jadell:

https://github.com/jadell/Neo4jPHP

Я слышал о пакетной обработки, но не уверен, будет ли он работать. Если какое-либо решение, пожалуйста, дайте мне короткий пример.

Благодаря Амит Аггарваль

ответ

1

Вы не можете сделать это с чистым REST API. Я хотел бы попробовать с Cypher, может быть что-то вроде:

START n=node(123) 
SET n.noOfUsers = n.noOfUsers + 1 
RETURN n.noOfUsers 

Это должно работать в последней версии Cypher http://console.neo4j.org/?id=tnkldf

+1

Здравствуйте, Джош, я тоже это попробовал, не знаю, почему иногда он обновляет правильный счет в противном случае случайным образом. Вот код https://gist.github.com/0xvoila/6349357 – voila

0

Neo4j 2,0 имеет обязательные операции. Если вы увеличили свой счетчик noOfUsers в транзакции, я бы подумал, что это поможет вам решить проблему параллелизма.

Просто подумайте, но сначала задайте вопрос: какова цель счетчика? Это для присвоения идентификаторов пользователей, или это строго информационный? Если последнее, у вас есть точный счет? Например, если вы хотите общее количество пользователей Twitter или Facebook, было бы важно, если счет был отключен несколькими? Если счетчик не должен быть точными (или точным в конкретном случае во время), вы можете запустить периодический процесс, чтобы вернуть количество узлов пользователей, как:

MATCH n:User 
return count(*) 

Это также поможет вам справиться с удаленными узлами.

+0

Привет, Дэвид, его цель - генерировать userIds. Поэтому любая несогласованность может принести мне большую проблему .. :(.. – voila

 Смежные вопросы

  • Нет связанных вопросов^_^