2010-06-18 92 views
3

我不知道这样的事情是可能的或不与simpledb。我正在尝试使用以下类型的simpledb数据结构中的 。关于属性名称SimpleDB查询

  1. 每个项目具有多个名称/值对(这里名称是属性名称) 例如

    ITEM1
    SERIAL_NUM - >值
    ITEM2
    SERIAL_NUM - >值

  2. 项的数目等在那里在一个域中和有多个这样的结构域。

我想查询是这样的:

select * from domain where attribute-name = 'serial number' 

获得所有相关的跨多个项目和领域一个序列号的项目; 这可能吗?

我的第二个问题是关于使用字段组合作为项目名称。
e.g
在上述结构中,

Foo_datetime 
      serial -> value 

Foo1_datetime 
      serial -> value 

然后我将查询之间的某些日期时间范围和perticular美孚或Foo1物品? 像

select * from domain where itemname = 'Foo' and itemname > datetime and itemname < datetime. 
+0

我想第一个问题的答案是 “select serial_num from domain” – Sujit 2010-06-18 22:12:08

回答

4

关于第一个问题,你认为该查询将工作就像你期待,你是否“SELECT *”或“选择SERIAL_NUM”,它仍然可以正常工作。 SimpleDB查询语言与SQL类似。尽管如此,没有办法让单个查询应用到多个域。每个查询都是特定于单个域的。要发布跨域查询,您必须向每个域发出查询。这会使您的查询量增加,但查询可以一次全部发送而不用等待,因此它不会乘以等待响应的时间。

要回答第二个问题,项目名称的确可以用来存储数据并对其进行查询。在这种情况下,您需要在查询中使用函数“itemName()”。重写以修复您的最终示例如下所示:

select * from domain where itemName() between 'Foodatetime1' and 'Foodatetime2' 

其中datetime 1和2被替换为实际值。

+0

感谢Mocky!工作! 项目名称上的查找会比查找属性名称更快吗? – Sujit 2010-06-25 19:18:12

+0

如果您已经知道项目名称,则使用项目名称获取项目并调用GetAttributes通常是最快的方法。在Select操作的上下文中,在where子句中使用itemName()或属性名称的速度是可比较的,并且取决于您的数据。 – Mocky 2010-06-28 14:23:08

+0

感谢Mocky的快速回复。最后一个问题与我原来的第二个问题有关。我可以查询类似的东西, select * from where where itemName()between'* datetime1'和'* datetime2' - where'*'就像是正则表达式通配符,意思是什么? – Sujit 2010-06-28 17:45:49

1

只是想添加一点Mocky的答案: SimpleDB存储/比较日期字符串。所以要小心并避免像2010-1-22那样存储日期,并且始终以符合ISO 8601的格式存储日期。