Порядок свойств в объектах базы данных Firebase - PullRequest
0 голосов
/ 03 августа 2020

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

{
    "screamID": "3hUYKDFdUzt055G3tp7i",
    "createdAt": {
        "_seconds": 1596446283,
        "_nanoseconds": 119000000
    },
    "body": "new scream 6",
    "userHandle": "new"
},
{
    "screamID": "KinWHznfRmGd4tJpsucV",
    "createdAt": {
        "_seconds": 1596438857,
        "_nanoseconds": 521000000
    },
    "userHandle": "new",
    "body": "new scream 4"
},
{
    "screamID": "aZM8sX1sgCOOymVMx7Uo",
    "body": "new scream 3",
    "userHandle": "new",
    "createdAt": {
        "_seconds": 1596199717,
        "_nanoseconds": 251000000
    }
}

На самом деле это ни на что не влияет, мне просто любопытно, почему он возвращает им это нравится.

1 Ответ

0 голосов
/ 03 августа 2020

Объекты типа карты с парами ключ / значение не имеют внутреннего упорядочения (за исключением тех типов карт, которые явно гарантируют его, чего не делает Firebase). На внутреннем уровне Maps будет использовать таблицу ha sh, чтобы вы могли быстро находить значения для любого ключа. Они не используют упорядоченный массив, потому что последовательное сканирование этого массива для каждого поиска было бы излишне трудоемким.

Как обычно реализуются таблицы ha sh, порядок итерации пар ключ / значение будет зависит от:

  1. Детали реализации ha sh
  2. Число записей в ha sh
  3. Порядок, в котором ключи были добавлены к нему

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

Принцип работы га sh таблиц - это фундаментальная информатика. Если вы хотите узнать больше, существует множество учебных материалов.

...