неглубокий ключ против глубокого ключа / значения в модели данных JSON - PullRequest
0 голосов
/ 19 декабря 2018

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

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

"content: [
    "en_US": {
        "speech": "Welcome!",
        "media": "welcome.jpg",
        // ... other data localized in "en_US"
    },
    "de_DE": {
        "speech": "Willkommen!",
        "media": "willkommen.jpg",
        // ... other data localized in "de_DE"
    }
]

Другой способ, который я вижу, - хранить строки и файлы jpg вместе в объекте и использовать идентификатор языка в качестве ключа, здесь content будет объектом ине массив:

"content": {
    "speech": {
        "en_US": "Welcome!",
        "de_DE": "Willkommen!"
    },
    "media": {
        "en_US": "welcome.jpg",
        "de_DE": "willkommen.jpg"
    }
}

Еще один способ - который приходит на ум при использовании mongoDB / mongoose, который не учитывает динамические ключи - будет иметь следующую структуру:

"content": [
    {
        "speech": "Welcome!",
        "media": "welcome.jpg",
        "lang": "en_US"
    },
    {
        "speech": "Willkommen!",
        "media": "willkommen.jpg",
        "lang": "de_DE"
    }
]

В последней версии я вижу, что БД должна искать в массиве соответствующий атрибут lang, но в первых двух версиях к ним можно получить прямой доступ.

Вопрос : Это единственная разница?Как это влияет на скорость чтения, принимая тонны записей?Какие могут быть другие факторы, которые я здесь упускаю?

...