你什么时候使用bigtabe/simpledb数据库与Relational数据库?
任何人都可以指出我的参考或提供高级概述,如Facebook,雅虎,谷歌等公司如何执行他们为运营,特别是网络分析做的大规模(例如多TB范围)日志分析?
特别关注网络分析,我对两个密切相关的方面感兴趣:查询性能和数据存储.
我知道一般的方法是使用map reduce在集群上分发每个查询(例如使用Hadoop).但是,最有效的存储格式是什么?这是日志数据,因此我们可以假设每个事件都有一个时间戳,而且通常数据是结构化的而不是稀疏的.大多数Web分析查询涉及分析两个任意时间戳之间的数据片段,并检索该数据中的聚合统计信息或异常.
像Big Table(或HBase)这样的面向列的数据库是一种有效的存储方式,更重要的是,它可以查询这些数据吗?您选择行的子集(基于时间戳)这一事实是否违背了此类存储的基本前提?将它存储为非结构化数据会更好吗,例如.反向指数?
在GAE中,我有一个名为Foo的模型,包含现有实体,并尝试向Foo 添加一个名为memcached的新属性,该属性在上次将此值设置为memcache时采用日期时间值.如果我尝试对此属性进行查询和排序,或者甚至过滤没有memcached值的实体,则不会返回尚未为此属性设置值的实体.有没有我在这里缺少的东西,或者作为替代方案,是否有快速的方法为给定模型的每个实体设置新属性的值?
我创建了一堆以下模型的实体,
class Foo(db.Model):
name = db.StringProperty(required=True)
Run Code Online (Sandbox Code Playgroud)
然后为此模型添加属性,
class Foo(db.Model):
name = db.StringProperty(required=True)
memcached = db.DateTimeProperty(required=True, auto_now=True, auto_now_add=True, default=datetime.min)
Run Code Online (Sandbox Code Playgroud)
在对查询执行排序或筛选时,不会考虑新属性的默认值.
我使用数据存储区中实体的Key值作为URL中用于提取记录的唯一标识符:
http://mysite.appspot.com/myaction/1x7s3fgdlbnRlcklkcicLAbcXc2VyQWNjb3VudCIFYW9uZ
Run Code Online (Sandbox Code Playgroud)
这不是一个非常有吸引力的解决方案,它也不是SEO友好的,但它是我发现在App Engine/Java中唯一识别实体的最简单方法.
不过,我主要担心的是,是否存在与显示实体的唯一Key值相关的安全问题?
我希望评估使用 Cassandra、BigTable 或 Hadoop 解决方案的可能性。是否有任何地方对这三者如何在一组基准测试中进行比较和执行进行了最新比较?我发现了一些可能是五年前的,但我想在深入研究之前更好地了解这三个数据库——它们的优点和缺点——。
在https://cloud.google.com/bigtable/docs/schema-design中,清楚地描述了如何选择表的行键。但我找不到任何有关如何编写此行键的信息。它是在哪里以及通过什么方式组成的?
Bigtable行键场景避免热点?
一家公司需要您在 Google Bigtable 中创建一个架构,以便对过去 2 年的记录进行历史分析。传入的每条记录每 15 分钟发送一次,并包含设备的唯一标识符和数据记录。最常见的查询是针对给定设备在给定日期的所有数据。您应该使用哪种模式?
上面最好的选择是什么?
看起来我可以用 cbt 读取带有前缀键的行
cbt -project someproject -instance someinstance read sometable prefix=abc
Run Code Online (Sandbox Code Playgroud)
但是我如何使用 cbtcommand 删除上述命令选择的那些行呢?
我试图删除 BigTable 中的筛选行。
我有一个表,该表的单元格中有一个空值,我想从表中删除该行,我编写了一个过滤器来选择相关行,但是当我尝试删除这些行时,出现错误。
enter code hereAttributeError: 'PartialRowData' object has no attribute 'delete'
我想知道应该如何过滤基于过滤器的相关行并删除它们。
我的代码是用Python写的
col1_filter = row_filters.ColumnQualifierRegexFilter(b'customerId')
label1_filter = row_filters.ValueRegexFilter('')
chain1 = row_filters.RowFilterChain(filters=[col1_filter, label1_filter])
partial_rows = table.read_rows(filter_=chain1)
for row in partial_rows:
row.delete()
Run Code Online (Sandbox Code Playgroud) 当您使用行过滤发出前缀扫描时,bigtable 服务器上会发生什么?
假设您使用过滤执行前缀扫描,随着时间的推移,更多的行最终会被过滤掉。我想知道性能是否会因过滤而降低。
Cloud Bigtable 在执行需要过滤掉大量行的前缀扫描时是否有效?
bigtable ×10
hadoop ×2
python ×2
architecture ×1
cassandra ×1
cbt ×1
database ×1
java ×1
mapreduce ×1
primary-key ×1
properties ×1
relational ×1
security ×1
storage ×1