Board logo

标题: Cloudant 多租户服务最佳实践-2 [打印本页]

作者: look_w    时间: 2018-2-21 14:43     标题: Cloudant 多租户服务最佳实践-2

优化查询性能您应该只依靠内置的 reduce 函数。我们发现,当文档很多时,自定义 JavaScript reduce 函数无法高效执行。如果需要使用一个操作查询 200 多个文档,可使用次索引来代替 Cloudant 搜索。在能够容忍稍微过期的数据时,应该尽可能地对查询使用 stale 选项。如果要对一个视图的大量结果进行翻页,可使用 startkey / startkey_docid 选项代替 skip 选项,如  中所述:
skip 选项仅应用于较小的值,在跳过大量文档时,这种方法的效率很低(它扫描来自 startkey 的索引,然后跳过 N 个元素,但仍需要读取所有索引值才能实现此目的)。要高效地分页,需要使用 startkey 和 limit。如果期望让多个文档发出相同的键,那么除了 startkey 之外,还需要使用 startkey_docid 来正确地分页。原因在于仅使用 startkey 无法唯一标识某一行。
优化索引性能创建或更新设计文档时,Cloudant 会为该文档中的每个视图都填充了一个索引。这些索引很重要,因为它们有助于让查询运行得更快。但是,理解索引过程的工作原理也很重要,因为对一个包含大量文档或复杂视图的数据库建立索引可能导致意外的副作用。
例如,索引是一种锁定操作,所以在为数据库建立索引期间不能使用该数据库(除非使用  “” 部分讨论的 stale 选项)。此外,在大量建立索引期间,整个 Cloudant 集群可能变得无响应或不稳定,所以您需要密切关注索引代码的性能。
当 Cloudant 为某个数据库的特定视图建立索引时,它会对数据库中的每个文档运行 map 函数,并存储该 map 函数发出的键来供未来引用。包含许多文档的数据库需要花很长时间才能建立索引,因为必须为数据库中的每个文档运行 map 函数,无论为每个文档发出的键有多少。包含非常复杂的 map 函数的视图也需要很长时间才能建立索引,因为必须对每个文档反复执行这种复杂的逻辑。
索引进程在后台运行,而且您为了创建或更新设计文档而提交的 HTTP 命令将在索引完成之前返回。可以通过 Cloudant UI 或监视 API 来监视索引进度,但无法 100% 准确地估算一个特定索引任务将花多长时间完成。
根据我们的经验,以下实践可减少为数据库建立索引的性能成本。
优化客户端性能针对 Cloudant 的所有请求必须通过 HTTP 进行传输,每个 HTTP 请求都具有性能成本。Cloudant 支持各种各样封装 HTTP 细节的客户端库,而且允许调用抽象操作,比如运行视图或创建文档。对于大部分客户,在处理少量请求时,底层 HTTP 请求的性能成本几乎察觉不到。但是,如果有大量与多租户应用程序有关联的请求,投入到 HTTP 请求中的时间量可能会削弱应用程序的性能。
结束语在本教程中,我们讨论了改进 Cloudant 在处理多租户服务方面的可靠性和可伸缩性的最佳实践。这包括组织文档和数据库,查询和删除文档,以及性能考虑因素。组织文档和数据库是实现可伸缩性的关键因素,而优化性能是维护可靠性的最重要因素之一。我们还提供了提高客户端性能和减少服务负载的最佳实践。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0