Правильный способ структурировать базу данных Firebase по датам - PullRequest
0 голосов
/ 22 января 2020

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

В настоящее время у меня есть две идеи о том, как я могу структурировать свои данные:

1) Разделить их на куски по частям даты

objects
    - objectA
        - 2020
            - 01
                - 22
                    - 01
                        - property1 : "Value at 1 o'clock on the 22nd of Jan, 2020"
                        - property2 : "Value at 1 o'clock on the 22nd of Jan, 2020"
                    - 02
                        - property1 : "Value at 2 o'clock on the 22nd of Jan, 2020"
                        - property2 : "Value at 2 o'clock on the 22nd of Jan, 2020"
                    ...
    - objectB
        ...

Этот метод дает мне преимущество в простоте запрашивая указанный c день или месяц и получая значения из него. Он также позволяет легко очищать старые данные от указанного c дня или месяца.

Однако недостатком является то, что я не могу придумать простой способ сделать так, чтобы данные в моем приложении представляли собой плоский список, отсортированный по времени (что, по большей части, - то, как мне нужно данные )

2) Сохранять данные в виде плоского списка дат в свойствах

objects
    - objectA
        - 2020:01:22:01
            - property1 : "Value at 1 o'clock on the 22nd of Jan, 2020"
            - property2 : "Value at 1 o'clock on the 22nd of Jan, 2020"
        - 2020:01:22:02
            - property1 : "Value at 2 o'clock on the 22nd of Jan, 2020"
            - property2 : "Value at 2 o'clock on the 22nd of Jan, 2020"
                    ...
    - objectB
        ...

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

Что является хорошим способом сделать это на практике? Хороши ли мои методы или я должен заниматься чем-то другим? Если что-то хорошо, то как мне решить с ним обратную сторону?

Мое приложение написано на Kotlin, так что есть ли в kotlin простой способ запросить базу данных из варианта 1 и получить его? вернуть в плоский список?

Ответы [ 2 ]

1 голос
/ 22 января 2020

Таким образом:

objects
    - objectA
        - 2020:01:22:01
            - property1 : "Value at 1 o'clock on the 22nd of Jan, 2020"
            - property2 : "Value at 1 o'clock on the 22nd of Jan, 2020"
        - 2020:01:22:02
            - property1 : "Value at 2 o'clock on the 22nd of Jan, 2020"
            - property2 : "Value at 2 o'clock on the 22nd of Jan, 2020"
                    ...
    - objectB
        ...

Лучше, чем вариант 1, всегда предпочитайте использовать плоскую структуру данных вместо вложенной. Если у вас возникли трудности с получением месяца или дня, вы можете добавить их как свойство:

objectA
    2020:01:22:01
        property1 : data
        month : 01
        day : 22

Но вы также можете использовать getKey(), а затем split, чтобы получить месяц и день.

https://firebase.googleblog.com/2013/04/denormalizing-your-data-is-normal.html?m=1

0 голосов
/ 22 января 2020

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

objects
    - objectA
        - 1579721879
            - property1 : "Value at 1 o'clock on the 22nd of Jan, 2020"
            - property2 : "Value at 1 o'clock on the 22nd of Jan, 2020"
        - 1579721964
            - property1 : "Value at 2 o'clock on the 22nd of Jan, 2020"
            - property2 : "Value at 2 o'clock on the 22nd of Jan, 2020"

или что-то подобное

objects
        - 1579721879 : "Value at 1 o'clock on the 22nd of Jan, 2020"
        - 1579721889 : "Value at 1 o'clock on the 22nd of Jan, 2020"
        - 1579721899 : "Value at 2 o'clock on the 22nd of Jan, 2020"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...