标签: bigtable

与Google App Engine和BigTable的递归关系

在经典的关系数据库中,我有下表:

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)

我试过这个并没有用.知道我做错了什么吗?

谢谢!

python google-app-engine database-design bigtable

5
推荐指数
1
解决办法
1365
查看次数

MegaStore与BigTable有何不同?

有人指出,谷歌应用引擎正在将其数据存储实施从BigTable转移到MegaStore.这两者有什么区别?

google-app-engine bigtable

5
推荐指数
1
解决办法
5502
查看次数

5
推荐指数
1
解决办法
1232
查看次数

建模分层数据 - GAE

我是google-app-engine和google datastore(bigtable)的新手,我有些疑惑,这可能是设计所需数据模型的最佳方法.

我需要创建一个层次结构模型,类似于产品目录,每个域都有一些深层子域.目前,产品的结构变化小于读取要求.葡萄酒示例:

  • 起源(Toscana,Priorat,Alsacian)
  • 酒庄(仅属于一个起源)
  • 葡萄酒(仅属于一个酒庄)

所有关系都是不相交和不完整的.此外,按照要求的顺序,我们可能需要存储每种葡萄酒的使用计数器(可能需要交易)

根据文档的顺序,似乎有不同的潜在解决方案:

  • 祖先管理.使用父关系和交易
  • 伪祖先管理.使用db.ListProperty(db.Key)模拟祖先
  • 的ReferenceProperty.明确指定类之间的关系

但是为了获得葡萄酒的预期要求......有时候是按品种,有时是原产地,有时是酒庄...我担心使用这些结构的查询的行为(比如关系模型中的多个连接).如果你要求一个家庭的产品...你需要加入产品树的最后深度限定符,并加入自家庭以来)

也许最好创建一些重复的信息(按照谷歌团队的建议顺序:操作很昂贵,但存储不是,所以不应该看到重复的内容是主要问题)

其他类似问题的一些回答表明:

  • 将所有父ID作为层次结构存储在字符串中...就像路径属性一样
  • 复制Drink实体与树中所有父母之间的关系......

有什么建议?


嗨,威尔,

我们的情况更像是一种严格的分层方法,如第二个例子所示.并且查询用于检索产品列表,只检索一个不常见的.

我们需要从Origin,Winery或Variety中检索所有葡萄酒(如果我们认为该品种是严格分层树的另一个节点,仅仅是一个例子)

一种方法可能是包含路径属性,如您所述:

  • /产地/ {ID} /酒厂/ {ID} /各种/ {ID}

允许我从应用如下查询的各种葡萄酒中检索葡萄酒列表:

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)

谢谢!

python google-app-engine bigtable

5
推荐指数
1
解决办法
464
查看次数

物化视图可以用作快速的非常规大表吗?

可以使用Oracle Materialized视图来连接具有外键的多个相关表,以创建更大的非规范化大表,并立即刷新吗?

在一些调查中,它表示在使用快速刷新时不允许连接.

我的假设是错误的,我可以用Oracle Materalized视图做这种事情吗?

oracle bigtable materialized-views denormalization

5
推荐指数
1
解决办法
570
查看次数

Bigtable/S3/Azure样式数据库上的数据库设计有什么好资源?

从关系数据库背景来看,我可以很快地转换到面向文档的数据库.许多最有价值的"关系"由文档的层次结构维护.NoSQL的许多DODB变体也提供了非常丰富的查询语言.这个NoSQL的子集我想我明白了.

我正在寻找一个很好的参考,围绕Azure表存储,S3和BigTable实现的数据库样式进行设计.看起来我看到的所有样本都是微不足道的实现.

你知道在这个空间有任何非平凡的设计处理吗?

bigtable amazon-s3 nosql azure-table-storage

5
推荐指数
1
解决办法
629
查看次数

解释Google Datastore(GAE)上的读/写性能注意事项?

我很难理解Google App Engine数据存储区的机制.
我想了解机制,以便以数据库的最佳方式构建数据库.

鉴于下面的例子,有人可以帮助我:

  1. 最佳地构建数据库
  2. 理解给定结构的读写 性能

示例:
假设我有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年?

写要求:增加某个棒球运动员的每日本垒打数.

我想了解如何构建数据以及读写的机制?这个简单的存储任务会扩展吗?谢谢大家.

google-app-engine bigtable google-cloud-datastore

5
推荐指数
1
解决办法
515
查看次数

哪种数据库技术适用于大结构化数据?

场景:假设您的 200 个表中有 90TB 的文本。这是结构化的相关数据。相比dbpedia只是数据更多。任何真正关系型、分布式和高性能的数据库都可以完成这项工作。不要\xe2\x80\x99 期望像社交网络那样多的更新,但大约 500 次读取查询/秒 20 次更新/秒,但除此之外所需的主要功能是高速对数据库进行大型分析,因为数据将通过机器进行重新处理和改进像 apache mahout 一样不断学习。

\n\n

现在的第一个问题是,从哪些数据库技术开始(或等待它们被释放)来首先维护所有数据,网络访问者数量相对较少,但对快速分析/机器学习的要求很高?其次,为了可能发生的特殊目的而跟踪哪些其他数据库,以及哪些数据库应从列表中删除或成对放置,哪些数据库应仅应用一个(/更好的)。

\n\n
Cloudera/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\n
Run Code Online (Sandbox Code Playgroud)\n

mysql cloud bigtable mongodb cassandra

5
推荐指数
1
解决办法
595
查看次数

使用Search API Python - Google App Engine大表

我想将Search API与已经使用已定义模型(db.Model)的应用程序一起使用.

例如,假设我的模型如下所示:

class Greeting(db.Model):
    author = db.StringProperty()
    content = db.StringProperty()
    date = db.DateTimeProperty()
Run Code Online (Sandbox Code Playgroud)

现在我如何使用Search API查询Greeting实体?

我已阅读文档但老实说我不明白.

请给我一个非常简单的例子.

python search google-app-engine bigtable gae-search

5
推荐指数
1
解决办法
1028
查看次数

如何有效地将 Google BigTable 中的行读取到 pandas DataFrame 中

使用案例:

我正在使用 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)

python bigtable pandas pyarrow

5
推荐指数
1
解决办法
6097
查看次数