Как ссылаться на данные таблицы Azure из таблицы SQL Server, используя GUID - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу реализовать функцию чата на своем сайте, используя как SQL Server, так и таблицу Azure.

Я хочу хранить метаданные чата (например, кто с кем общается и когда и т. Д.) В моей базе данных SQL Azure, а также хранить GUID чата в SQL Server, но фактический текст чата хранится в таблице Azure. .

Итак, как это будет работать?

После прочтения таблиц Azure я должен

  1. сохранить GUID в SQL Server, который представляет ключ раздела в моей таблице Azure?

    • чтобы все чаты между пользователем A и пользователем B имели одинаковый GUID / раздел?
    • тогда я могу получить все сообщения по разделам, отфильтрованным по дате!
    • мне нужно использовать ключ строки в этом сценарии?
    • есть ли ограничения на разделы, что если у меня останутся тысячи или даже миллионы?
  2. Храните guid для каждого сообщения, сохраняя все, кроме фактического содержимого сообщения в SQL Server, что приводит к возможным миллиардам строк для всех чатов. В этом сценарии, я думаю, я бы использовал / нужен только 1 раздел?

  3. ????

1 Ответ

0 голосов
/ 02 ноября 2018

В общем, это будет работать.

1 - Да, вы должны использовать повторяющийся ключ с уникальной идентификацией в качестве ключа раздела.

  • Ключом раздела может быть GUID. Но, возможно, было бы лучше хеш-значение идентификатора пользователя A & B. Тогда вы все равно сможете получить ключ раздела, но хранить его где-либо не обязательно.
  • Да, вам все равно понадобится ключ строки, так как это первичный ключ записи. Ключ раздела - это просто группа определенных записей.
  • Нет ограничений на ключи разделов - в общем, это должно происходить часто, но тогда должно быть / может быть их тысячи

2 - миллиарды записей по-прежнему будут иметь место, в зависимости от того, как вы решили хранить сообщения чата (хранить каждую строку чата или через каждые x минут или ...). Но я бы все-таки предложил что-то вроде ключа раздела.

SQL Server 2016 и Azure SQL имеют функцию под названием «Индексы хранилища столбцов», которая значительно улучшает запросы и оптимизирует размер данных, записываемых на диск (к сожалению, это доступно только на уровне P1 в Azure)

Рассматривали ли вы использование Cosmos Db - пропускная способность была бы лучше. Это если у вас будет много трафика. Cosmos Db работает очень быстро, и если вы используете секционированные коллекции, у вас будут те же функции и неограниченное пространство для хранения.

Я уверен, что у вас есть веские причины, но немного странно, что вы хотите использовать для этого три разных типа хранилища. Не подойдет ли один тип хранилища (SQL, Azure SQL, хранилище Azure Table, Cosmos Db, ..)?

...