SimpleDB查询属性名称

时间:2010-06-18 19:38:18

标签: amazon-simpledb

我不知道simpledb是否可能。我正在尝试使用 以下类型的simpledb数据结构。

  1. 每个项目都有多个名称/值对(此处的名称是属性名称) 例如

    ITEM1
        serial_num - >值
    ITEM2
        serial_num - >价值

  2. 域中存在此类数量的项目,并且存在多个此类域。

  3. 我想查询类似的内容:

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

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

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

    Foo_datetime
                serial -> value
    
    Foo1_datetime
                serial -> value
    

    然后我会查询某个日期时间范围之间的项目以及特定的Foo或Foo1?

    之类的东西
     select * from domain where itemname = 'Foo' and itemname > datetime and itemname < datetime.
    

2 个答案:

答案 0 :(得分:4)

对于您的第一个问题,您建议的查询将按预期工作,无论您是“选择*”还是“选择serial_num”,它都可以正常工作。 SimpleDB查询语言类似于SQL。但是,无法将单个查询应用于多个域。每个查询都特定于单个域。要发出跨域查询,您必须向每个域发出查询。这会使您的查询量倍增,但查询可以一次性发送而无需等待,因此不会增加您等待响应的时间。

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

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

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

答案 1 :(得分:1)

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