2010-06-18 69 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的格式存儲日期。