python - union with sort in Google-App-Engine -
मेरे पास एक वर्ग है:
वर्ग लेनदेन (db.Model): accountDebit = db .ReferenceProperty (संदर्भ_क्लैश = खाता, संग्रह_नाव = "कोंटडागुजी") accountCredit = db.ReferenceProperty (संदर्भ_क्लैश = खाता, संग्रह_नाव = "कोंटपोत्ताज़") राशि = डीबी। फ्लोटप्रॉपर्टी () Tran_date = db.DateProperty () टिप्पणी = db.StringProperty ()
यहाँ खाता वर्ग की विधि है जिसके द्वारा मैं विशेष खाते के सभी लेन-देन (अकाउंट डिबिट या अकाउंट क्रेडिट के साथ लेन-देन) प्राप्त करना चाहता हूं, लेकिन तिथि के अनुसार सॉर्ट किया गया:
< प्री> डीआईएफ GetTransactions (स्वयं): लेनदेन = [] transactions_debit = db.GqlQuery ('चयन से ट्रांजैक्शन' + 'जहां खाता' डेबिट =: 1 ', स्वयं) transactions_credit = db.GqlQuery (' चयन से 'ट्रांजैक्शन' + ' Transaction_debit: x.amount = -x.amount transactions.append (x) के लिए लेनदेन में x के लिए खाता के रूप में एक्सचेंज =: 1 ', स्व) लेनदेन में: x.amount = x.amount लेनदेन.एपेंड (एक्स) रिटर्न लेनदेन उद्देश्य इस दो परिणामों के साथ मिलन करना है, लेकिन सीमा + ऑफसेट के साथ। इस तथ्य पर विचार करें कि आप एक ही क्वेरी में 1000 से अधिक पंक्तियों को नहीं ला सकते हैं ...
कृपया
आप एक या (पायथन कड़ी मेहनत से आपके लिए आवेदन स्तर पर इसे संश्लेषित कर सकते हैं), जो "छांटने वाली संघ" का ख्याल रखता है। हालांकि, यदि आपको> 1000 लेनदेन के बारे में चिंता करने की आवश्यकता है, तो इससे मदद नहीं मिलेगी (और ऑफ़सेट और सीमा भी नहीं होगी: ऑफ़सेट की सीमा का क्या सीमित है जो 1000 तक सीमित है!)। आपको & lt;
स्थितियों में से कुछ के साथ कुछ और (संभवतः वही फ़ील्ड जिस पर आप छंटनी कर रहे हैं, tran_date
मुझे कल्पना करनी है) का टुकड़ा करना होगा, और पाठ्यक्रम आपको सटीक सीमा की गारंटी नहीं दे सकता है और आपकी इच्छा की भरपाई नहीं कर सकता है, इसलिए आपको उनसे थोड़ी मात्रा से अधिक करना होगा और आवेदन स्तर पर eccess को बंद करना होगा।
संपादित करें : या वास्तव में अनुप्रयोग स्तर पर संश्लेषित नहीं है (इन और! = वे हैं जो दो ऑपरेशन हैं), तो आपको इसे खुद को संश्लेषित करने की आवश्यकता है (कोर्स के आवेदन स्तर पर भी), उदाहरण के लिए:
def GetTransactions (खाता): लेन-देन = सूची (डीबी। जीक्यूएलएपी ('ट्रांजैक्शन से' चयन करें '' अकाउंट डेबिट =: 1 ऑर्डर से ट्रॅन_डेट ', अकाउंट)) लेनदेन। एक्सटेंशन (डीबी। जीक्यूएलएक्वायरी (' ट्रांजैक्शन से 'सेलेक्ट करें' 'अकाउंट क्रेडिट) : 1 आदेश द्वारा ट्रॅन_डेट ', खाता)) transactions.sort (key = operator.attrgetter (' tran_date ')) वापसी लेनदेन
लेकिन बड़े मुद्दे अभी भी हैं ऊपर उल्लिखित।
तो खेलने में संख्याएं क्या हैं - उपयोगकर्ता के लिए सामान्य लेन-देन की संख्या (प्रति सप्ताह या प्रति दिन कहते हैं), एक उपयोगकर्ता के लिए आम तौर पर अधिकतम, आप किस प्रकार के परिमाणों के लिए जा रहे हैं आपके ऑफसेट और सीमा, आदि आदि की आवश्यकता है? इन संख्याओं के परिमाण के आदेशों के बिना किसी विशिष्ट डिज़ाइन विकल्प का सुझाव देने के लिए मुश्किल! -)
संपादित करें : कोई समाधान नहीं है जो इष्टतम या उचित होगा, इन मापदंडों में से प्रत्येक के परिमाण के किसी भी आदेश के लिए - आप प्रति उपयोगकर्ता प्रतिदिन कई लाखों लेन-देन के साथ कुशलता से कैसे काम करते हैं, आप प्रति उपयोगकर्ता प्रति लेन-देन के साथ कुछ लेन-देन से कैसे गहराई से अलग होने जा रहे हैं; मैं एक वास्तुकला की कल्पना भी नहीं कर सकता जो कि दोनों मामलों में समझ में आता है (शायद मैं, शायद, एक संबंधपरक संदर्भ में, लेकिन एक गैर-रिलेशनल में ऐसा नहीं है जैसे कि हम यहां हैं - उदाहरण के लिए, लाखों लेन-देन प्रति दिन, आप वास्तव में अपनी तिथि को रिकॉर्ड करने से लेन-देन पर एक महीन-दानेदार टाइमस्टैम्प चाहते हैं! -)।
Comments
Post a Comment