База данных Azure - правила разработки схемы

У меня есть простой «вариант использования»: представьте, что я хочу клонировать приложение Facebook с помощью Xamarin и Azure.

Прочитав это: https://docs.microsoft.com/en-us/azure/cosmos-db/social-media-apps

Я заметил, что могу хранить свои данные в наборе коллекций / документов (SQL API).

Но когда мне приходится обрабатывать миллионы отношений, это не работает, мне приходится использовать базу данных Graph API!

Итак, для этого мне нужно создать базу данных в Azure, вот что я сейчас сделаю:

1 - Одна база данных Cosmos DB - с SQL API (коллекция) с: a) коллекцией для пользователя b) коллекцией для публикации

2 - Единая база данных Comos DB - с API-интерфейсом Gremlin (График) с: a) Графиком для управления отношениями между пользователем и публикацией (т. Е. Пользователем A, подобным публикации B)

Итак, база данных SQL API будет управлять всеми записями, а база данных Gremlin - всеми связями комплексов.

Итак, у меня есть несколько вопросов: 1) Мне действительно нужны 2 несвязанные базы данных? Или это плохой дизайн? Потому что каждый раз, когда я добавляю пользователя, мне нужно добавлять в коллекцию не только документ, но и вершину! Это двойное управление!

2) Когда я вставляю документ в коллекцию, он автоматически генерирует «id» с ключом GUID. Могу ли я использовать этот идентификатор в качестве ключа для моих вершин?

Может быть, у пользователя и публикации может быть один и тот же GUID? Итак, в моем графе я не знаю, является ли моя вершина пользователем или публикацией?

Есть ли другой способ справиться с этим?

Спасибо


person ClubberLang    schedule 02.09.2018    source источник


Ответы (1)


Крызалид. Почему вы хотите создать 2 базы данных для вашей ситуации? Насколько я понимаю, вы можете выбрать SQL API или Graph API.

SQL API:

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

{
  "user":"jay",
  "likePubArray":
     [{"pubId":"A"},{"pubId":"B"}]    
}

Если вам также нужен двунаправленный запрос, сохраните массив идентификаторов пользователей в документе pub.

Graph API:

Создайте пользовательскую вершину и вершину pub и добавьте целевое свойство в вершину.

введите здесь описание изображения

Надеюсь, это поможет тебе.

person Jay Gong    schedule 03.09.2018
comment
Спасибо, @JayGon, обратитесь к этой статье: docs. microsoft.com/en-us/azure/cosmos-db/social-media-apps. Объясняют, что когда у вас много отношений (от нескольких тысяч до миллионов), это невозможно с помощью SQL API! Просто прочтите NO SQL Road ... они объясняют, почему :-) - person ClubberLang; 03.09.2018