Использование загрузки 4,7 ГБ для базы данных в реальном времени, и у меня есть только 2 номера для запроса во всей базе данных, что я делаю не так?

# #java #android #firebase-realtime-database

Вопрос:

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

Тем не менее, мое использование загрузки в месяц достигает 4,7 ГБ, почему?

Это код, который запрашивает базу данных в моем родном приложении для Android (Java).:

     private void getRefValue(DatabaseReference ref, TextView view) {
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NotNull DataSnapshot dataSnapshot) {
            String value = dataSnapshot.getValue(String.class);
            String textData;
            if (view.getTag().toString().equals("sellText")) {
                textData = "Sell: "   value;
                editor.putString("sell", value);
            } else {
                textData = "Buy: "   value;
                editor.putString("buy", value);
            }

            editor.apply();

            view.setText(textData);

        }


        @Override
        public void onCancelled(@NotNull DatabaseError error) {
            // Failed to read value
            Log.d("Failed to read", error.getMessage()   " "   error.getDetails());
        }

    });

}
 

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

Ссылка на базу данных передается в качестве аргумента при вызове функции, она вызывается дважды, по одному разу для каждой записи в базе данных.

Мой код делает что-то не так? Я не очень разбираюсь в Java или родном Android.

Комментарии:

1. Трудно сказать, откуда вы загружаете, основываясь на информации, которой вы поделились. Но загрузки Firebase довольно просто оценить как: number of users * number of connections * data per connection , причем последняя из SSL overhead number of reads * size of each read них . Накладные расходы SSL составляют около 4K, а все остальные номера поступают от вашего кода и пользователей.

2. Следуя этому уравнению, я должен получать около 60-130 МБ в месяц, я получаю около 152 МБ В ДЕНЬ, в настоящее время я пытаюсь получить доступ к папке данных/данных моего приложения, чтобы понять, почему размер увеличивается на 15 МБ каждый раз, когда я открываю приложение, также оказывается, что сделать это на телефоне или эмуляторе Huawei сложнее, чем вторгнуться в Нормандию.

Ответ №1:

Я столкнулся с той же проблемой и столкнулся с огромными счетами от Firebase. Проблема в том, что каждый раз, когда пользователь заходит в приложение. Он попадает в базу данных, которая использует данные. Как будто вы использовали общие настройки для автономных пользователей, но вам просто нужно нажать на прослушиватель событий только тогда, когда есть какие-либо изменения в базе данных. Для этого вы можете сделать версии, если в версии есть какие-либо изменения, он проверит наличие данных, в противном случае он покажет данные только из общих предпочтений, даже если на устройстве есть подключение к Интернету.

Я уменьшаю сумму выставления счета только с 2Lacs до 2,5 тыс.

Комментарии:

1. Что ты имеешь в виду? Я уже использую onDataChange

2. Да, но, как вы сказали, онлайн-пользователь будет получать данные из Firebase каждый раз, когда пользователь заходит в приложение. Если у вас 12000 пользователей в месяц и если каждый пользователь заходит в приложение 10 раз в день, то у вас 120000 пользователей в этом смысле, поэтому, чтобы избежать повторения вызовов, вызывайте ondatachange только при изменении значения в базе данных

3. И как именно я могу узнать, были ли изменены данные, НЕ запрашивая их? существует ли какой-то специальный прослушиватель, который запрашивает данные только при их изменении? как я могу узнать, были ли изменены данные или нет?

4. Да, не могли бы вы, пожалуйста, сказать мне, сколько продаж и ставок делает один пользователь, чтобы сказать, есть ли какой-либо список/ хэш-карта?

5. Нет, просто один курс покупки, состоящий из числа, и другой курс покупки, состоящий из другого числа в той же структуре