哪种数据访问技术更适合DocumentDB

时间:2016-06-27 15:50:25

标签: c# linq azure-cosmosdb

我正在创建一个网站内容管理系统,它存储了大量的网站文章,让用户可以通过系统修改这些文章。我是一个典型的SQL Server开发人员,但我想也许这个系统可以在DocumentDB中完成。

我们使用C#和WebAPI进行读写。我正在测试不同的数据访问技术,以确定哪个更好。我一直在尝试Ling,Linq Lambda,SQL和存储过程。事实上,当我通过Postman测试时,所有这些查询方法似乎都在600ms到700ms之间运行。例如,我的一个测试是一个简单的Get http://localhost:xxxxxx/multilanguage/resources/1,它需要600ms +。那只是一个1kb的文件,到目前为止我的收藏中只有5个文件。

所以我想我想问的是:有没有比这更快的方式来查询DocumentDB。我问的原因是因为我之前在SQL Server中做了类似的事情(不是查询文档,而是关系表)。在多个连接表上的存储过程中,更复杂的查询只需要大约300毫秒。所以我想应该有一个更快的方法来做到这一点。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:0)

最有可能的是,如果您将实现更改为stab,您将获得相同的性能,因为实际上您正在测试您的服务器和客户端(邮递员)之间的连接时间。

答案 1 :(得分:0)

您可以做一些事情,但请记住,DocumentDB和其他NoSQL解决方案的行为与标准SQL Server的行为完全不同。例如,DocumentDB可用的节点和RAM越多,它的整体性能就越好。可以理解,Azure上的DocumentDB开发实例将比生产实例使用更少的资源。由于Azure负责扩展,因此考虑它的一种方法是,您拥有的数据越多,它就会越好。

也就是说,您可能不习惯的是为整个应用程序共享连接对象。这样可以避免每次想要获取数据时的启动惩罚。总结Performance Tips

  • 可以
  • 使用TCP连接而不是HTTPS
  • 使用await client.OpenAsync()来避免暂停第一次请求的启动延迟
  • 连接到同一区域的DocumentDB(请注意,如果您跨区域托管)
  • 使用单例访问DocumentDB(它是线程安全的)
  • 缓存您的SelfLink以便快速访问
  • 调整页面大小,以便只获取您打算使用的数据

更高级的performance tips覆盖索引策略等.DocumentDB和其他NoSQL数据库的行为与SQL数据库不同。这也意味着您对API如何工作的假设可能是错误的。确保您正在测试类似的概念。 SQL Server数据库连接对象需要您为每个事务创建/处置对象,以便它可以将这些连接返回到连接池。以同样的方式处理DocumentDB会导致与不使用连接池相同的性能问题。