2016-11-21 2 views
0

У меня есть узел под Firebase для разных ресторанов, который содержит список активных и прошлых посетителей. Этот узел называется listvisitors. Под узлом ресторана мне нужен счетчик для всех посетителей. Здесь я хочу использовать транзакции Firebase.Какое максимальное количество попыток для транзакции Firebase перед сбоем

Идея состоит в том, чтобы увеличить счетчик, когда человек открывает страницу ресторана. Как и в случае с конкуренцией, сделка кажется хорошим вариантом.

В популярном ресторане можно одновременно посещать множество посетителей, что приводит к раздорам. Может ли масштаб транзакций справиться с этим?

Если да, то каковы максимальные повторы, которые транзакция может обрабатывать, прежде чем сбой при ошибке максимальной повторной попытки. (По сути, максимальные одновременные обновления при условии, что все пользователи залогинится одновременно)

Если нет. Есть ли эффективная альтернатива по существу подсчитать количество текущих детей по спискам и получить правильный номер?

ответ

1

Клиент Firebase в настоящее время прерывает транзакцию, если она не удалась после 25 попыток.

Ну, прежде чем вы увидите этот уровень раздора, было бы разумно перейти на другую стратегию. Распространенный способ решения этой проблемы является не каждый посетитель обновит общий счетчик, но вместо того, чтобы иметь каждый из них написать «Я посетил это» в базу данных с push():

ref.child("visits").push().setValue(currentUser.getUid()); 

Тогда вы можете иметь серверный процесс, который вытаскивает посещения из списка и увеличивает счетчик. В стабильном состоянии это означает, что список visits пуст. В любой момент список visits содержит только посещения, которые еще не были учтены.

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

+0

Привет, спасибо за ответ .... На самом деле счетчик служит для отображения текущих активных посетителей, которые сообщают клиентам о количестве толпы, с которой им придется столкнуться. К сожалению, у меня не может быть сервера, делающего это. Клиенты добавляют в список и рестораны удаляют, когда они уходят. Пожалуйста, предлагайте все, что вы можете подумать, чтобы решить эту проблему. – Kushan

+0

Если честно: кажется маловероятным, что вы столкнетесь с спорными проблемами в это время. Если вы это сделаете: мой ответ показывает альтернативы. –

0

Может быть, вопросы по Princig могут помочь вам ... На вопрос: Что такое «одновременное подключение к базе данных»?
Это ответ, который они обеспечивают:

Firebase накладывает жесткие ограничения на количество одновременных подключений к базе данных вашего приложения. Эти ограничения предназначены для защиты как от Firebase, так и от наших пользователей от злоупотреблений. Предел плана искры составляет 100 и не может быть поднят. Планы пламени и пламени в настоящее время имеют начальный предел в 10 000 одновременных подключений к базе данных. Этот лимит не совпадает с общим количеством пользователей вашего приложения, потому что ваши пользователи не все подключаются одновременно. Мы рекомендуем отслеживать одновременные подключения к базе данных и, при необходимости, обновлять их. Мы работаем над удалением начальных 10000 одновременных подключений в планах Flame и Blaze.

О опции, чтобы получить текущее число детей, есть methodnumbChildren, но в зависимости от вашего снимка ... Here некоторые пользователи обсуждают об этом.

+0

Я имел в виду одновременные обновления для одного определенного значения местоположения .... Транзакции предназначены для решения этой параллелизма ... Мой вопрос в том, какое количество параллелизма слишком много для транзакций, так как оно будет постоянно пытаться записывать данные до тех пор, пока это не окончательно преуспевает без каких-либо разногласий или просто отказывается от указанной мной ошибки. – Kushan

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