2013-07-26 14 views
6

में बहु सम्मिलित पंक्तियों को कैसे करें कैसंड्रा कॉलम परिवार में एकाधिक पंक्तियों को डालने का सबसे प्रभावी तरीका क्या है। क्या यह एक कॉल में करना संभव है।कैसंड्रा

अभी मेरा दृष्टिकोण एकाधिक कॉलम जोड़ने और फिर निष्पादित करना है। एक ही कॉल में मैं एक पंक्ति बना रहा हूं। मैं रणनीति की तलाश में हूं ताकि मैं बैच सम्मिलित कर सकूं।

+0

कौन सा ड्राइवर आप उपयोग कर रहे: नीचे का उपयोग करता है और बैच के दुरुपयोग पर अच्छा लेख के एक जोड़े कर रहे हैं? क्या आप सीक्यूएल का उपयोग कर रहे हैं? कौन सा कैसंद्रा संस्करण? – Richard

+0

कैसंड्रा संस्करण is1.2.x है और मैं हेक्टर एपिस का उपयोग कर रहा हूं। – ajjain

उत्तर

0

आप फ़ाइल में अपने एकाधिक सम्मिलन विवरण जोड़ सकते हैं और फ़ाइल को 'cqlsh -f' के साथ निष्पादित कर सकते हैं।

तुम भी बैच डालने CQL साथ कैसेंड्रा में के रूप में लिंक नीचे में वर्णित प्रदर्शन कर सकते हैं: http://www.datastax.com/documentation/cassandra/1.2/index.html#cassandra/cql_reference/batch_r.html

3

कैसेंड्रा में एक बैच डालने आपरेशन नहीं है। सम्मिलन को और अधिक कुशल बनाने के लिए, आप अलग-अलग स्तंभ परिवारों में भी सम्मिलित हो सकते हैं।

हेक्टर में, आप HFactory.createMutator का उपयोग कर सकते हैं और फिर अपने बैच में ऑपरेशन जोड़ने के लिए लौटा हुआ म्यूटेटर पर add विधियों का उपयोग कर सकते हैं। तैयार होने पर, execute() पर कॉल करें।

आप CQL उपयोग कर रहे हैं, तो BEGIN BATCH साथ बैच शुरू करने और APPLY BATCH के साथ समाप्त होने से एक बैच में समूह बातें।

+3

सुनिश्चित करें कि यह समझ में आता है कि यह एक अच्छा विचार है और [जब यह नहीं है] (http://docs.datastax.com/en/cql/3.1/cql/cql_using/useBatch.html)। बैच आमतौर पर प्रदर्शन में सुधार नहीं करते हैं और इसे सबसे खराब मामले में भी कम कर सकते हैं। यदि आपको परमाणु लिखने की आवश्यकता नहीं है, तो एक अनलॉक बैच का उपयोग करना सुनिश्चित करें। –

+1

अच्छा बिंदु। मुझे लगता है कि बहाव बैचों में लगभग हमेशा मदद की जाती है (बहाव के बड़े पैमाने पर ओवरहेड की वजह से)। सीक्यूएल में, आपको बैच के बजाए एसिंक इन्सर्ट और तैयार कथन का उपयोग करना चाहिए। मामले के अलावा जब आपके आवेषण एक ही विभाजन के लिए होते हैं, तो मामले में बैच अधिक कुशल होते हैं। – Richard

12

सीक्यूएल एक BEGIN बैच के साथ आता है ... बैच स्टेटमेंट लागू करें जो कई आवेषणों को एक साथ जोड़ना संभव बनाता है, ताकि एक डेवलपर ऐसे बैच अनुरोध की स्ट्रिंग बना सके और इसे निष्पादित कर सके। [http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0]

निम्नलिखित मेरे लिए काम किया:

var statement: PreparedStatement = session.prepare("INSERT INTO people (name,age) VALUES (?,?)") 
var boundStatement = new BoundStatement(statement) 
val batchStmt = new BatchStatement() 
batchStmt.add(boundStatement.bind("User A", "10")) 
batchStmt.add(boundStatement.bind("User B", "12")) 
session.execute(batchStmt) 
:

PreparedStatement ps = session.prepare(
"BEGIN BATCH" +  
"INSERT INTO messages (user_id, msg_id, title, body) VALUES (?, ?, ?, ?);" +  
"INSERT INTO messages (user_id, msg_id, title, body) VALUES (?, ?, ?, ?);" +  
"INSERT INTO messages (user_id, msg_id, title, body) VALUES (?, ?, ?, ?);" +  
"APPLY BATCH"); 

session.execute(ps.bind(uid, mid1, title1, body1, uid, mid2, title2, body2, uid, mid3, title3, body3)); 

आप, आप निम्न संरचना (स्काला) का उपयोग कर सकते क्या बयान आप पर अमल करना चाहते हैं पहले से पता नहीं है, तो

नोट: बैचस्टेटमेंट 65536 कथन तक रख सकता है। यह कठिन तरीका सीख लिया। :-)

+1

महान जवाब! यह मेरे लिए भी काम करता है! – capcom923

+0

@ user853509 एक "शानदार जवाब" जिसने आपकी मदद की, और यहां तक ​​कि एक उत्थान भी नहीं? कठोर। – Aaron

+0

अच्छा जवाब। इसके अलावा एक मुझसे। – Aaron