【问题标题】:how to calculate the sum of a column of google datastore如何计算谷歌数据存储列的总和
【发布时间】:2014-07-31 11:28:51
【问题描述】:

我正在用 webbapp2 框架编写一个应用程序

我的数据库是

class SurveyFaculty(db.Model):
name = db.StringProperty()
clas = db.StringProperty()
roll_no = db.IntegerProperty()
semester = db.IntegerProperty()
q11 = db.IntegerProperty()
q12 = db.IntegerProperty()
q13 = db.IntegerProperty()
q14 = db.IntegerProperty()
q15 = db.IntegerProperty()
q21 = db.IntegerProperty()
q22 = db.IntegerProperty()
q23 = db.IntegerProperty()
q24 = db.IntegerProperty()
q25 = db.IntegerProperty()
q31 = db.IntegerProperty()
q32 = db.IntegerProperty()
q33 = db.IntegerProperty()
q34 = db.IntegerProperty()
q35 = db.IntegerProperty()
q41 = db.IntegerProperty()
q42 = db.IntegerProperty()
q43 = db.IntegerProperty()
q44 = db.IntegerProperty()
q45 = db.IntegerProperty()
q51 = db.IntegerProperty()
q52 = db.IntegerProperty()
q53 = db.IntegerProperty()
q54 = db.IntegerProperty()
q55 = db.IntegerProperty()
q61 = db.IntegerProperty()
q62 = db.IntegerProperty()
q63 = db.IntegerProperty()
q64 = db.IntegerProperty()
q65 = db.IntegerProperty()
q71 = db.IntegerProperty()
q72 = db.IntegerProperty()
q73 = db.IntegerProperty()
q74 = db.IntegerProperty()
q75 = db.IntegerProperty()
q81 = db.IntegerProperty()
q82 = db.IntegerProperty()
q83 = db.IntegerProperty()
q84 = db.IntegerProperty()
q85 = db.IntegerProperty()
q91 = db.IntegerProperty()
q92 = db.IntegerProperty()
q93 = db.IntegerProperty()
q94 = db.IntegerProperty()
q95 = db.IntegerProperty()
q101 = db.IntegerProperty()
q102 = db.IntegerProperty()
q103 = db.IntegerProperty()
q104 = db.IntegerProperty()
q105 = db.IntegerProperty()
q111 = db.IntegerProperty()
q112= db.IntegerProperty()
q113= db.IntegerProperty()
q114= db.IntegerProperty()
q115= db.IntegerProperty()
q121= db.IntegerProperty()
q122= db.IntegerProperty()
q123= db.IntegerProperty()
q124 = db.IntegerProperty()
q125 = db.IntegerProperty()
created = db.DateTimeProperty(auto_now_add = True)    

如果我也想获得特定列的加法(总和),我想知道应该写什么查询???

如何计算我的数据库每一列的总和???

【问题讨论】:

    标签: python-2.7 google-app-engine google-cloud-datastore


    【解决方案1】:

    你不能。 GAE 数据存储不是关系型数据库,您不能进行求和。

    最好的办法是使用mapreduce framework 进行迭代并计算总和。

    【讨论】:

      【解决方案2】:

      如前所述,您根本做不到。

      GAE 数据存储是如何构建的,甚至不要考虑任何服务器端计算,它根本不会这样做。数据存储的速度和可扩展性来自于它只对预先排序的表进行扫描(您在写入时损失了一点速度,但在读取时获得了难以置信的数量)。

      因此,您可以选择为您的总数保留一个单独的实体,并在您推送新数据时更新该实体(将“id = 1”作为您的总数,当您放入新数据时,您将获得 id 1 并执行+= 在将 id 1 再次放入数据存储之前对每个属性进行 +=),或者使用 mapreduce,正如 Daniel 提到的那样

      【讨论】:

        【解决方案3】:

        作为使用 map reduce 的替代方法,您可以预先计算您关心的属性的总和。特别是,您可以使用sharded counter

        这将使您能够有效地跟踪属性的总和,而无需运行任何作业来进行计算(可能除了初始 map reduce 来填充现有数据的总和)。如果您要编写大量需要更新计数器的实体,分片计数器的好处是可以扩展以防止争用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-10
          • 2013-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-17
          • 1970-01-01
          相关资源
          最近更新 更多