在经典的关系数据库中,我有下表:
CREATE TABLE Person(
Id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
MotherId int NOT NULL REFERENCES Person(Id),
FatherId int NOT NULL REFERENCES Person(Id),
FirstName nvarchar(255))
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此表格转换为Google App Engine表格.我的问题在于MotherId和FatherId字段.我尝试了下面的代码,但没有机会.Python说它不知道对象类型Person.
class Person(db.Model):
mother = db.ReferenceProperty(Person)
father = db.ReferenceProperty(Person)
firstName = db.StringProperty()
Run Code Online (Sandbox Code Playgroud)
有人知道我们如何在Google App Engine表中建模递归关系吗?我如何解决App Engine的限制?
更新 我想稍微扩展一下这个问题......如果我想添加一个孩子的集合怎么办?
children = db.SelfReferenceProperty(collection_name='children_set')
dad.children.append(childrenOne)
Run Code Online (Sandbox Code Playgroud)
我试过这个并没有用.知道我做错了什么吗?
谢谢!
有人指出,谷歌应用引擎正在将其数据存储实施从BigTable转移到MegaStore.这两者有什么区别?
db.get()的性能与db.get_by_key_name()的性能相比如何?
google-app-engine scalability bigtable google-cloud-datastore
我是google-app-engine和google datastore(bigtable)的新手,我有些疑惑,这可能是设计所需数据模型的最佳方法.
我需要创建一个层次结构模型,类似于产品目录,每个域都有一些深层子域.目前,产品的结构变化小于读取要求.葡萄酒示例:
所有关系都是不相交和不完整的.此外,按照要求的顺序,我们可能需要存储每种葡萄酒的使用计数器(可能需要交易)
根据文档的顺序,似乎有不同的潜在解决方案:
但是为了获得葡萄酒的预期要求......有时候是按品种,有时是原产地,有时是酒庄...我担心使用这些结构的查询的行为(比如关系模型中的多个连接).如果你要求一个家庭的产品...你需要加入产品树的最后深度限定符,并加入自家庭以来)
也许最好创建一些重复的信息(按照谷歌团队的建议顺序:操作很昂贵,但存储不是,所以不应该看到重复的内容是主要问题)
其他类似问题的一些回答表明:
有什么建议?
嗨,威尔,
我们的情况更像是一种严格的分层方法,如第二个例子所示.并且查询用于检索产品列表,只检索一个不常见的.
我们需要从Origin,Winery或Variety中检索所有葡萄酒(如果我们认为该品种是严格分层树的另一个节点,仅仅是一个例子)
一种方法可能是包含路径属性,如您所述:
允许我从应用如下查询的各种葡萄酒中检索葡萄酒列表:
wines_query = Wine.all()
wines_query.filter('key_name >','/origin/toscana/winery/latoscana/variety/merlot/')
wines_query.filter('key_name <','/origin/toscana/winery/latoscana/variety/merlot/zzzzzzzz')
Run Code Online (Sandbox Code Playgroud)
或者来自Origin:
wines_query = Wine.all()
wines_query.filter('key_name >','/origin/toscana/')
wines_query.filter('key_name <','/origin/toscana/zzzzzz')
Run Code Online (Sandbox Code Playgroud)
谢谢!
可以使用Oracle Materialized视图来连接具有外键的多个相关表,以创建更大的非规范化大表,并立即刷新吗?
在一些调查中,它表示在使用快速刷新时不允许连接.
我的假设是错误的,我可以用Oracle Materalized视图做这种事情吗?
从关系数据库背景来看,我可以很快地转换到面向文档的数据库.许多最有价值的"关系"由文档的层次结构维护.NoSQL的许多DODB变体也提供了非常丰富的查询语言.这个NoSQL的子集我想我明白了.
我正在寻找一个很好的参考,围绕Azure表存储,S3和BigTable实现的数据库样式进行设计.看起来我看到的所有样本都是微不足道的实现.
你知道在这个空间有任何非平凡的设计处理吗?
我很难理解Google App Engine数据存储区的机制.
我想了解机制,以便以数据库的最佳方式构建数据库.
鉴于下面的例子,有人可以帮助我:
示例:
假设我有N个棒球运动员,每个人都有一个唯一的ID.
我想保持每个玩家击中本垒打的每日记录(存储"每日全部归属"属性)并且当本垒打被击中时基本上增加它.
所以,随着时间的推移,我想每年为每位棒球运动员展示一份本垒打图表.
Player 1
1/21/2011 - 2 homeruns
1/22/2011 - 0 homeruns
1/23/2011 - 1 homeruns
Run Code Online (Sandbox Code Playgroud)
阅读要求:阅读特定玩家每日"本垒打"数据的最近5年?
写要求:增加某个棒球运动员的每日本垒打数.
我想了解如何构建数据以及读写的机制?这个简单的存储任务会扩展吗?谢谢大家.
场景:假设您的 200 个表中有 90TB 的文本。这是结构化的相关数据。相比dbpedia只是数据更多。任何真正关系型、分布式和高性能的数据库都可以完成这项工作。不要\xe2\x80\x99 期望像社交网络那样多的更新,但大约 500 次读取查询/秒 20 次更新/秒,但除此之外所需的主要功能是高速对数据库进行大型分析,因为数据将通过机器进行重新处理和改进像 apache mahout 一样不断学习。
\n\n现在的第一个问题是,从哪些数据库技术开始(或等待它们被释放)来首先维护所有数据,网络访问者数量相对较少,但对快速分析/机器学习的要求很高?其次,为了可能发生的特殊目的而跟踪哪些其他数据库,以及哪些数据库应从列表中删除或成对放置,哪些数据库应仅应用一个(/更好的)。
\n\nCloudera/Brisk (Cassandra,Hive)\nmysql(cluster), mariadb\nBerkeley DB\ndrizzle, nimbusdb,\nscidb (http://www.theregister.co.uk/2010/09/13/michael_stonebraker_interview/)\nmongodb\ndatadraw\nneo4j\nRun Code Online (Sandbox Code Playgroud)\n 我想将Search API与已经使用已定义模型(db.Model)的应用程序一起使用.
例如,假设我的模型如下所示:
Run Code Online (Sandbox Code Playgroud)class Greeting(db.Model): author = db.StringProperty() content = db.StringProperty() date = db.DateTimeProperty()
现在我如何使用Search API查询Greeting实体?
我已阅读文档但老实说我不明白.
请给我一个非常简单的例子.
使用案例:
我正在使用 Google BigTable 来存储这样的计数:
| rowkey | columnfamily |
| | col1 | col2 | col3 |
|----------|------|------|------|
| row1 | 1 | 2 | 3 |
| row2 | 2 | 4 | 8 |
| row3 | 3 | 3 | 3 |
Run Code Online (Sandbox Code Playgroud)
我想读取给定范围的行键的所有行(在本例中假设所有行)并聚合每列的值。
一个简单的实现将查询行并在聚合计数时迭代行,如下所示:
from google.cloud.bigtable import Client
instance = Client(project='project').instance('my-instance')
table = instance.table('mytable')
col1_sum = 0
col2_sum = 0
col3_max = 0
table.read_rows()
row_data.consume_all()
for row in row_data.rows:
col1_sum += int.from_bytes(row['columnfamily']['col1'.encode('utf-8')][0].value(), byteorder='big')
col2_sum += int.from_bytes(row['columnfamily']['col2'.encode('utf-8')][0].value(), …Run Code Online (Sandbox Code Playgroud)