我喜欢数据存储区的简单性,可扩展性和易用性; 并且在新的ndb库中找到的增强功能非常棒.
据我了解数据存储区最佳实践,当匹配查询的项目数量很大时,不应编写代码来提供匹配查询结果的项目和/或页面计数; 因为唯一的方法是检索所有资源密集的结果.
然而,在包括我们的许多应用程序中,通常希望看到匹配项目的计数并向用户提供导航到那些结果的特定页面的能力.数据存储分页问题由于需要解决fetch(limit,offset = X)的限制而变得更加复杂,如文章Paging Through Large Datasets中所述.为了支持推荐的方法,数据必须包含一个唯一值列,可以按结果显示的方式进行排序.此列将为每个结果页面定义一个起始值; 保存它,我们可以有效地获取相应的页面,允许按要求导航到特定页面或下一页面.因此,如果要显示以多种方式排序的结果,可能需要维护多个此类列.
应该注意的是,从SDK v1.3.1开始,Query Cursors是推荐的数据存储分页方式.它们有一些限制,包括缺乏对IN和!=过滤器运算符的支持.目前我们的一些重要查询使用IN,但我们将尝试使用OR编写它们以用于查询游标.
遵循建议的指南,可以为用户提供(下一个)和(上一个)导航按钮,以及导航过程中的特定页面按钮.例如,如果用户按下(下一步) 3次,应用程序可以显示以下按钮,记住每个按钮的唯一起始记录或光标以保持导航效率:( 上一页)(第1页)(第2页)(页面) -3)(第4页)(下一步).
有些人建议分别跟踪计数,但是当允许用户查询将改变返回结果的丰富字段时,这种方法是不实际的.
我正在寻找有关这些问题的见解以及以下问题:
您在数据存储区应用中提供了哪些查询结果的导航选项来解决这些限制?
如果为用户提供有效的结果计数和整个查询结果集的页面导航是一个优先事项,那么应该放弃使用数据存储区,以支持现在提供的GAE MySql解决方案.
大表架构或数据存储区实现中是否有任何即将发生的更改,这些更改将提供有效计算查询结果的附加功能?
非常感谢您的帮助.
我有一个Django应用程序,我试图在多种类型的实体组上执行交易.当我尝试在我的本地开发机器上测试时,我收到此错误:
错误2012-03-27 10:11:12,971 datastore.py:2480]异常发送回滚:回溯(最近一次调用最后一次):文件"/usr/local/google_appengine/google/appengine/api/datastore.py",行2475,在_DoOneTry文件"/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py",第1984行,在回滚文件"/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py"中,行1999年,在async_rollback文件"/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py",第1928行,在_end_transaction文件"/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py"中,行1883年,在事务文件"/usr/local/google_appengine/google/appengine/api/apiproxy_stub_map.py",第592行,在get_result文件"/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py"中,行1670,在__begin_transaction_hook文件"/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py",第1184行,在check_rpc_success中BadRequestError:多个实体组仅允许使用High Replication数据存储区
什么是最好的解决方法?
在Google App Engine中,事务隔离被称为SNAPSHOT隔离,您不会在事务本身中看到先前的删除或放置,而只会在事务开始时看到数据存储的状态(https://developers.google.com/ appengine/docs/python/datastore/transactions).在较早的文章中,它说事务级别实际上是SERIALIZABLE(https://developers.google.com/appengine/articles/transaction_isolation).
Google测试兼容性工具包(TCK)显示它确实是SNAPSHOT隔离,但在上述文章中它说"内部事务,另一方面,隔离级别默认为SNAPSHOT,可以选择更改为SERIALIZABLE".
我的问题是,如何使隔离级别变为SERIALIZABLE?
Firebase实时数据库以区分大小写的方式接受带字符串的查询.
这仍然适用于Firestore吗?
很简单,网站必须满足哪些标准才能获得SSL证书?
网站不是电子商务,但会获取用户信息,联系方式和活动信息.
即使技术上不需要,SSL只是为用户提供了网站中增加的"信任"吗?
干杯
根据我的经验,我看到很多架构图,它们广泛使用FTP作为链接架构组件的媒介.
作为一个不做出架构决策但倾向于查看架构图的人,任何人都可以解释使用FTP的价值,适当的地方和将数据作为文件传输时是个好主意.
我知道通常遗留系统只需要以这种方式工作 - 尽管任何历史见解都会很有趣
我可以看到传输文件的吸引力(特别是如果那是需要转移的东西),因为它的简单性和熟悉性,并且如果推理超出这个范围就会感到奇怪.
编辑:感谢那些指出SFTP更受欢迎的人,但是我的问题比想要文件传输协议的建议更广泛.对困惑感到抱歉.
我正在使用web.py和GAE(Windows 7,Python27)运行一些基本的测试代码.该表单允许将消息发布到数据存储区.当我停止应用并再次运行时,之前发布的任何数据都已消失.使用admin手动添加实体(http:// localhost:8080/_ah/admin/datastore)也存在同样的问题.
我尝试使用额外标志在应用程序设置中设置路径:
--datastore_path=D:/path/to/app/
Run Code Online (Sandbox Code Playgroud)
(不确定那里的语法).它没有效果.我搜索了我的计算机上的*.datastore,并且找不到任何文件,这似乎是可疑的,尽管数据显然是在应用程序运行期间存储在某处.
from google.appengine.ext import db
import web
urls = (
'/', 'index',
'/note', 'note',
'/crash', 'crash'
)
render = web.template.render('templates/')
class Note(db.Model):
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
class index:
def GET(self):
notes = db.GqlQuery("SELECT * FROM Note ORDER BY date DESC LIMIT 10")
return render.index(notes)
class note:
def POST(self):
i = web.input('content')
note = Note()
note.content = i.content
note.put()
return web.seeother('/')
class crash:
def GET(self):
import logging
logging.error('test')
crash
app = web.application(urls, globals())
def …Run Code Online (Sandbox Code Playgroud) google-app-engine persistence python-2.7 google-cloud-datastore
我们使用数据存储作为持久性后端在Google App Engine上运行应用程序.目前,应用程序主要具有"OLTP"功能和一些初步报告.在实施报告时,我们遇到使用数据存储区和GQL处理大量数据(数百万个对象)非常困难.为了使用适当的报告和商业智能功能增强我们的应用程序,我们认为最好设置ETL过程以将数据从Datastore移动到BigQuery.
最初我们考虑将ETL过程实现为App Engine cron作业,但看起来Dataflow也可用于此.我们有以下设置流程的要求
我的问题是
问题是这两种方法可行吗?哪一个更好的成本?有没有比上面两个更好的其他方式?
谢谢,
rizTaak
google-app-engine google-bigquery google-cloud-datastore google-cloud-dataflow
如何获取查询返回的实体的密钥?
我试图像普通数据一样访问它,但是当我打印实体本身时没有密钥.有没有办法这样做?
预先感谢您的帮助.
我知道Cloud Firestore根据Geopoints中的纬度和经度存储位置.但是,我找不到基于到某一点的距离来查询文档的方法或方法,GeoFire对实时数据库的作用.
有没有办法实现这一目标?
database ×2
firebase ×2
android ×1
architecture ×1
ftp ×1
location ×1
node.js ×1
persistence ×1
python-2.7 ×1
security ×1
web ×1