热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

datastore_3使用GoogleCloudDatastore的有用技巧。

datastoreGoogleCloudDatastore是一种托管的,无模式的,高度可扩展的NoSql数据库,对于希望减少使用量增长的数

datastore

Google Cloud Datastore是一种托管的,无模式的,高度可扩展的NoSql数据库,对于希望减少使用量增长的数据库规模的开发人员特别有用。 它建立在Google的Bigtable Database之上,并且具有许多强大的功能,您可能要在下一个项目中考虑它,但是在这样做之前,这里有一些快速提示,您应该知道这些提示,以避免遇到一些陷阱。使用此数据库。

  1. Google Cloud Datastore不是SQL,它甚至没有关闭。

Google Cloud Datastore是一个NOSQL数据库,但是当人们和文档试图解释这一概念时,他们倾向于将其与SQL进行比较,例如,可以将实体与表进行比较,将其属性与列进行比较,因为许多开发人员已经熟悉SQL。 另外,数据存储区还具有强大的查询引擎,可让您查询数据甚至对数据进行相应排序,这可能使开发人员假设他们可以像在SQL中一样对数据进行建模。 但事实是,Datastore的基础实现与SQL完全不同,这是一些关键区别。

I. 没有自动递增主键 :与SQL不同,SQL通常不会随每次写入而递增,而在Google Cloud Datastore中,实体是由KEY标识的,该KEY通过其Kind和标识符标识符是数据存储为您自动生成的ID,或者是密钥名称属性 ,您可以将其提供为数据存储的标识符,该属性是一个字符串,您确定该字符串对于该类型的每个实体都是唯一的。

注意:标识符仅在一种内唯一,并且在创建实体后不能更改。

二。 无外键约束 :在数据存储区中,您可以使用其他实体的来引用其他实体 但是在编写或删除这些实体时不会进行数据完整性检查,因此您不能确保它们所引用的实体确实存在。 您在这里必须小心,因为这是极有可能发生数据完整性问题的点。

三, 数据存储区不强制唯一性 :除了上面(I)中提到的标识符外,Google Cloud Datastore不允许您为实体中的任何其他字段指定唯一性,如果您想确保唯一性,则必须自己实现在编写实体时执行读取。

2. 尽早知道要索引什么:

Google Cloud Datastore利用索引来辅助查询,对实体中的字段建立索引对于在数据存储区中进行查询非常重要,实际上,如果您不对字段建立索引并尝试过滤具有该字段的查询,则不会获得任何结果即使查询与结果匹配,这也是因为数据存储区仅在查询时查找索引,因此它不允许您像其他数据库一样进行全表扫描以获取查询结果。

数据存储中有两种类型的索引:基本索引和复合索引。基本索引用于单个属性字段,而当您打算按多个字段进行过滤时,则使用复合索引。

重要的是要知道要对哪些字段进行早期索引,因为建立索引可能会花费很长时间,尤其是当数据库中有很多实体时。

实际上,对于单个属性索引,它们不是在为索引建立索引后自动构建的,索引是在每次写入时构建的,因此,如果您有一百万个这种类型的实体,并且打算对一个字段进行索引,则必须阅读每个索引。 1百万个实体并将其写回以记录索引,这可能会非常昂贵。 同样,当您尝试使用尚未建立索引的复合字段进行查询时,即使您已为这些字段建立了索引,也未建立索引,但仍会出现错误。

因此,为避免这些问题,请尝试考虑要在查询中使用的字段,并尽早对其进行索引。

3. 如何计数实体(带阴影的计数器):与SQL不同,您可以轻松使用查询

select count(*)

要获取表中的项目数,数据存储区没有任何这样的语法,您必须使用其他实体自行记录您的实体数,因此,如果您有一个名为User的实体,并且希望知道其中有多少个用户您的数据库,那么您需要让另一个实体称为UserCount。 UserCount实体将具有一个数字字段,该字段将在用户每次写入数据库时​​增加,而在从数据库中删除用户时减少。 这相当简单,但是当计数需要频繁更新(例如每秒20次)时,可能会出现问题。 这可能会导致DataStore争用错误 ,这意味着每个并行更新项目的请求都无法在其请求超时之前完成。 使用分片计数器可以解决此问题 这仅意味着创建该实体(碎片)的片段,并在需要更新计数时随机选择每个实体进行更新,这将降低发生数据存储争用错误的可能性。

注意:分片数量越多,出现数据争用错误的可能性就越小,谷歌云样本就如何实现分片计数器提供了一个不错的示例。

因此,尽管Datastore保证了可伸缩性,但也有它的缺点,尤其是在数据完整性和查询方面,它还有一些缺点,在将其用于项目之前,应考虑这些因素。

如果您想分享其他技巧,可以在下面的评论中添加,谢谢

翻译自: https://hackernoon.com/3-useful-tips-when-using-google-cloud-datastore-832c726e6c92

datastore



推荐阅读
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 本文介绍如何在SQL Server中创建动态SQL存储过程,并提供详细的代码实例和解释。通过这种方式,可以更灵活地处理查询条件和参数。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 在使用Node.js运行时环境的Next.js应用程序部署过程中,遇到了与目录文件数量相关的错误。本文将详细探讨该问题及其解决方案。 ... [详细]
author-avatar
百变精灵_tb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有