База данных Sql Server в Azure кажется неэффективной и дорогой, если сообщения чата забивают мою базу данных большим количеством данных, когда пользователи общаются друг с другом.
Есть ли лучшее решение Azure, в котором я все еще могу сохранять данные, связанные с сообщением (например, от идентификатора к идентификатору, метке времени и т. д.).
Если вы не знакомы с Document DB и таблицами Azure, в чем разница и будет ли одно из них хорошим решением? Или есть решение получше? Может быть, федерации Sql Azure?
В настоящее время я использую blob для хранения изображений, но это не похоже на хорошее решение для сообщений чата.
Таблицы Azure - это красиво и дешево. Это позволит вам выполнять поиск по разделу и идентификатору внутри раздела - все остальное не индексируется и не может быть легко найдено. Если вам нужно только получить ваши чаты по пользователю / дате - это может сработать.
Cosmos DB намного более гибок, чем Azure Tables, но намного дороже с гораздо большим количеством скрытых затрат, таких как производительность как стоимость. И платить за каждую коллекцию, даже если вы ею не пользуетесь.
Из ваших комментариев я вижу, что если я просто хочу вызвать чаты от предыдущего пользователя, таблицы будут работать нормально, но как насчет страницы, где мне нужно показать чаты, скажем, от последних 6-10 пользователей !? Есть ли способ запросить в таблице все сообщения от меня (идентификатор), а затем отсортировать их по уникальному идентификатору (идентификатор пользователя, которому я отправил сообщение) и дате?
Я бы сохранил метаданные чата (например, кто с кем и когда разговаривает и т. д.) В базе данных SQL, а также сохраню GUID чата в SQL, но фактический текст чата будет храниться в таблице Azure. Таким образом, вы можете искать по своим метаданным и показывать последние X чатов / сообщений, но сохранять данные в таблицах.
Применяется тот же принцип - вы можете хранить фактические чаты в больших двоичных объектах Azure, если вы можете получить идентификатор из SQL.
но, согласно вашей рекомендации, я бы тогда не стал хранить идентификатор и некоторые другие метаданные для каждого сообщения чата? Разве это не привело бы к взрыву и моей базы данных? Этого я бы хотел избежать! Я имею в виду, если я собираюсь сохранить это Sql Server, то почему бы просто не сохранить еще ~ 100 байт или около того? Сообщения в чате довольно короткие, и я могу ограничить их количество, если захочу.
Я говорю о чатах, а не об отдельных сообщениях. Сообщения отправляются в Таблицы, информация о чатах - в SQL. Выберите, где положить то, что вам нужно
Я понимаю, думаю! Метаданные на сервере Sql и содержимое сообщения в таблице или большом двоичном объекте Azure, но разве это не приведет к взрыву базы данных?
Потенциально. Я не знаю. Зависит от того, что вы решите сохранить в SQL и сколько у вас будет чатов. Но если у вас достаточно чатов, о которых нужно беспокоиться, у вас будет достаточно денег, чтобы покрыть расходы на хранение, иначе это бесполезно.
Что ж, я могу сказать, что метаданные, которые я буду хранить, - это пара идентификаторов, отметка даты и времени, идентификатор таблицы Azure, может быть, одна или две другие вещи. Но я думаю, вы должны ожидать всех сценариев, включая тот, в котором у вас будут храниться миллионы пользователей и миллиарды сообщений чата.
Миллионы пользователей - это хорошая проблема. Если у вас возникла такая проблема - у вас будут ресурсы для перезаписи хранилища. Не зацикливайтесь на этом.
последний вопрос ... Я никогда не использовал таблицы Azure, могу ли я запрашивать и фильтровать по свойствам сущности. бывший. если у объекта, который я сохраняю, есть дата, от идентификатора до идентификатора и т. д.? Точно так же, как данные SQL-сервера, но все это делается в таблице Azure? или я могу запросить таблицу Azure только по идентификатору? Или как насчет другого решения, в котором я создаю раздел таблицы для каждого пользователя? будет ли это хорошим решением или слишком дорогим в долгосрочной перспективе?
Понятно, это по ключу раздела, а затем по ключу строки. Жаль, что нет третьего ключа, который решал бы множество проблем.
возможно, вы можете посоветовать ... Это типичный социальный сайт, такой как Match или OkCupid, мне нужна страница, на которой можно увидеть предыдущие сообщения с фотографиями пользователей и отметками времени и последним сообщением. Затем, если щелкнуть предыдущее сообщение, я могу открыть другую страницу, где находятся последние ~ 6 сообщений и могут быть созданы новые сообщения. Кроме того, если на странице профиля пользователь нажимает кнопку чата, открывается небольшое окно чата, в котором можно поговорить с этим пользователем, и, возможно, последние 1-2 сообщения также будут там.