मेरे पास एक एज़ूर टेबल है जहां ग्राहक संदेश पोस्ट करते हैं, एक ही तालिका में लाखों संदेश हो सकते हैं। मैं पिछले 10 मिनट में संदेश पोस्ट करने का सबसे तेज़ तरीका ढूंढना चाहता हूं (जो कि मैं वेब पेज को कितनी बार रीफ्रेश करता हूं)। चूंकि केवल विभाजन कुंजी को अनुक्रमित किया गया है, इसलिए मैंने दिनांक & दिनांक का उपयोग करने के विचार के साथ खेला है जब संदेश को विभाजन कुंजी के रूप में पोस्ट किया गया था, उदाहरण के लिए "2009-06-15T13: 45: 30.0900000"Azure तालिका में नवीनतम आइटम के लिए पूछताछ का सबसे तेज़ तरीका?
जैसे ISO9801 दिनांक प्रारूप के रूप में एक स्ट्रिंगउदाहरण छद्म कोड:
var message = "Hello word!";
var messagePartitionKey = DateTime.Now.ToString("o");
var messageEntity = new MessageEntity(messagePartitionKey, message);
dataSource.Insert(messageEntity);
, और फिर संदेशों इस तरह पिछले 10 मिनट के भीतर तैनात के लिए क्वेरी (फिर अपरीक्षित छद्म कोड):
// Get the date and time 10 minutes ago
var tenMinutesAgo = DateTime.Now.Subtract(new TimeSpan(0, 10, 0)).ToString("o");
// Query for the latest messages
var latestMessages = (from t in
context.Messages
where t.PartitionKey.CompareTo(tenMinutesAgo) <= 0
select t
)
लेकिन यह अच्छी तरह से से ले जाया जाएगा अनुक्रमणिका? या यह एक पूर्ण टेबल स्कैन का कारण बन जाएगा? किसी को भी ऐसा करने का बेहतर विचार है? मुझे पता है कि प्रत्येक टेबल आइटम पर टाइमस्टैम्प है, लेकिन यह अनुक्रमित नहीं है इसलिए यह मेरे उद्देश्य के लिए बहुत धीमा होगा।
एक sidenote के रूप में, आपको शायद विभाजन कुंजी के रूप में कुछ और सामान्य उपयोग करना चाहिए। जैसे आपकी पोस्ट संबंधित है या ऐसा। Http://msdn.microsoft.com/en-us/library/windowsazure/hh508997.aspx –
पर एक नज़र डालें क्या वही मशीन आवेषण और क्वेरी दोनों कर रही है? यदि नहीं, तो आपको ग्राहकों के बीच संभावित घड़ी के लिए जिम्मेदार होना होगा। –