2011-06-13 19 views
16

लागू करने के लिए अपेक्षाकृत सीधे आगे बढ़ने में Azure संग्रहण में पेजिंग Paging with Windows Azure Table Storage। इसे निरंतर टोकन कार्यक्षमता के साथ कार्यान्वित किया जा सकता है।अज़ूर स्टोरेज टेबल पेजिंग

लेकिन।

यह गंभीर पेजिंग के लिए सिर्फ एक शुरुआत है। पहली समस्या सॉर्टिंग है। आप Azure तालिका में ऑर्डरबी नहीं कर सकते हैं। इस पर काबू पाने का सबसे अच्छा समाधान क्या होगा? पेजों को हल किया जाना चाहिए, यह तथ्य है।

दूसरी समस्या, पेजिंग पर आने पर कुल पृष्ठों की संख्या जानना है, केवल निरंतर टोकन कार्यक्षमता के साथ यह संभव नहीं है। प्रत्येक पृष्ठ पर करने के लिए ".Count()" मुझे बहुत अक्षम लगता है (उदाहरण के लिए विभाजन कई सर्वरों पर हो सकता है)।

तीसरी समस्या दूसरी बात से संबंधित है, यहां तक ​​कि आप यह भी गिन सकते हैं कि आपके पास कितने पेज हैं, वास्तविक पृष्ठों को वास्तविकता टोकन में "कनेक्ट" कैसे करें? यह मेरे लिए सबसे बड़ा रहस्य है। विशिष्ट तालिका पंक्ति से निरंतरता कैसे प्राप्त करें?

यदि सही समाधान प्रदान किया जा सकता है तो मैं बहुत खुश हूं। मुझे स्वीकार करना होगा कि मेरे पास भी एक है और मैं इसे नीचे दिए गए उत्तरों में से एक में लिखूंगा।

+0

इस प्रश्न और उत्तर के लिए कोई प्रतिक्रिया? –

+2

यदि आपको टेबल संग्रहण को सॉर्ट करने और गिनने की आवश्यकता है तो सही उत्पाद नहीं है। एसक्यूएल एज़ूर सॉर्टिंग और गिनती प्रदान करता है। टेबल स्टोरेज विभाजन कुंजी और पंक्ति कुंजी पर प्राथमिक खोज के साथ बड़ी संख्या में पंक्तियों को संग्रहीत करने के लिए है। यह बड़ी संख्या में कक्षाओं को क्रमबद्ध करने के लिए है। – Paparazzi

+0

ऐसा लगता है कि आपको एक रिलेशनल डेटाबेस की आवश्यकता है, न कि NoSQL एक। – tugberk

उत्तर

10

मुझे पता है कि यह आपके प्रश्न को हल करने के तरीके से हल नहीं करता है, लेकिन फिर भी, मुझे विश्वास नहीं है कि पेजिंग आपको सुझाए गए तरीके से किया जाना चाहिए। इसका मतलब यह है कि, क्योंकि एज़ूर टेबल स्टोरेज आपको आवश्यक कार्यक्षमता का समर्थन नहीं करता है, यह एक अच्छा फिट नहीं हो सकता है।

मुझे स्थानीय कैश में डेटा मिल जाएगा, वहां ऑर्डर और पेजिंग करें और इसके साथ किया जाए। सावधानीपूर्वक पंक्तिकुंजी/विभाजनकी का निर्माण करने के साथ इस सीमा के लिए एक सुझाव दिया गया है लेकिन मैं दृढ़ता से सुझाव देता हूं कि आप इसका पालन न करें।

Blog blog= new Blog(); 
// Note the fixed length of 19 being used since the max tick value is 19 digits long. 
string rowKeyToUse = string.Format("{0:D19}", 
     DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks); 
blog.RowKey = rowKeyToUse; 

तो एक ब्लॉग बी 1 दिनांक 10/1/2008 10:00:00 पूर्वाह्न RowKey रूप 2521794455999999999 होगा, और बी 2 दिनांकित 2008/10/02 10:00:00 पूर्वाह्न RowKey रूप 2521793591999999999 होगा और इसलिए बी 2 बी 1 से पहले होगा।

 string rowKeyToUse = string.Format("{0:D19}", 
     DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks); 
var blogs = 
    from blog in context.CreateQuery<Blog>("Blogs") 
    where blog.PartitionKey == "Football" 
     && blog.RowKey.CompareTo(rowKeyToUse) > 0 
    select blog; 

(इस Windows Azure टेबल, दिसम्बर 2008 दस्तावेज़ से लिया गया है:

सभी ब्लॉगों के बाद 10/1/2008 10:00:00 पूर्वाह्न दिनांक को पुनः प्राप्त करने के लिए, हम follwing क्वेरी का उपयोग करेगा माइक्रोसॉफ्ट द्वारा provided)

पृष्ठों की संख्या गिनने के लिए, यह आसान है, बस विभाजित ऑपरेशन यहां चाल करेगा; निरंतर टोकन के लिए, एक तरफ (प्रारंभिक अनुरोध पर) प्रत्येक पृष्ठ पर "चलना" होगा और निरंतर टोकन प्राप्त करें जो मूल रूप से आपको बताता है कि कौन सी पंक्ति & विभाजन कुंजी अगली आती है। लेकिन उनमें से सभी का मतलब है कि आप स्थिरता त्रुटियों के प्रति संवेदनशील हैं (उदाहरण के लिए यदि कोई एक ही तालिका भंडारण में कुछ पोस्ट करता है)।

व्यक्तिगत रूप से, मैं पंक्तियों पर आधारित पृष्ठ जैसा कि मैंने ऊपर वर्णित किया है, या, यदि यह एक आवश्यकता है, तो इसका समर्थन करने वाले स्टोरेज इंजन पर जाएं।

थोड़ा आगे विस्तार करने के लिए, यदि आपको पता है कि आपके पास केवल एक "ऑर्डरबी" खंड होगा, तो आप उनमें से सभी का चयन कर सकते हैं, और कुछ निहितार्थ के माध्यम से अनुमान लगा सकते हैं कि पेज सीमाएं क्या होंगी।

एक तरफ ध्यान दें, मेरा मानना ​​है कि प्रदान की गई पेजिंग में फ्रंटिंग पर पेजिंग की अनुमति नहीं है बल्कि 1000 परिणाम सीमा को कम करने के लिए है। लेकिन यह सिर्फ मेरा $ 0.02 है।

संबंधित मुद्दे