কোনও পাঠ্য ফাইলে কোনও টেবিল রফতানি করার দ্রুততম উপায় কী


17

আমার কাছে একটি এসকিউএল সার্ভার 2012 ডাটাবেস এবং 3 মিলিয়ন সারি এবং সম্ভবত 50 টি কলাম সহ একটি টেবিল থাকবে। অপ্রচলিত ব্যাকগ্রাউন্ড। নেট প্রক্রিয়াটি (সম্ভবত কিছু এসকিউএল বা পাওয়ারশেল কমান্ড জারি করে) কোনও পাঠ্য ফাইলে রফতানি করার জন্য দ্রুততম উপায় কী হবে, ডাটাগুলির প্রতিটি সারির জন্য একটি লাইন? .NET প্রক্রিয়াটি কখন রফতানি শেষ হয়েছে বা কোনও ত্রুটি ছিল কিনা তা জানতে হবে। ডেটাটাইপ সব হবে intবা nvarchar

আমি ধরে নিচ্ছি যে একটি select *কমান্ড কার্যকর করতে অ্যাডো নেট ব্যবহার করে একটি খাঁটি সি # কোড এবং ডেটারিডারের উপরে লুপিং এবং প্রতিটি রেকর্ডের জন্য একটি ফাইলে লেখার কাজটি ধীর হবে এবং এর সাথে আমি এর সমান্তরাল করার উপায় নেই।

আদর্শভাবে রফতানিটি এসএমএল সার্ভার মেশিনে কোনও স্থানীয় ফোল্ডারে নয় একটি দূরবর্তী শেয়ার্ড নেটওয়ার্ক ফোল্ডারে হবে। এসকিউএল সার্ভারটি এইচএ ক্লাস্টার হবে। এসএসআইএস কি এর জন্য আরও উপযুক্ত, কোনও ডেটা ট্রান্সফর্মেশন প্রয়োজন?

। নেট প্রক্রিয়াটি মেশিন এ, মেশিন বিতে এসকিউএল সার্ভারে চলবে এবং চূড়ান্ত ফাইল গন্তব্য একটি নেটওয়ার্ক শেয়ার। এর একটি বিকল্প হ'ল এসকিউএল সার্ভার ফাইলটি সরাসরি নেটওয়ার্ক শেয়ারে লিখে। অন্য বিকল্পটি হ'ল এসকিউএল সার্ভার মেশিন এ লিখেছেন এবং তারপরে ফাইলটি লেখার সময়। নেট প্রক্রিয়া এটিকে নেটওয়ার্ক শেয়ারে অনুলিপি করে। আমার কাছে আনুষ্ঠানিক এসএলএ নেই তবে 30 মিনিট - ফাইলের লেখার জন্য 1 ঘন্টা আশা করছি।


3
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."- নেট অ্যাপটি কোথা থেকে চলবে? সবচেয়ে খারাপ ক্ষেত্রে, এর অর্থ এই হতে পারে যে ডেটাটিকে 2 টি নেটওয়ার্ক হপের মধ্য দিয়ে যেতে হবে, এটি সম্ভবত সবচেয়ে বড় বাধা। এছাড়াও, সারিগুলির সংখ্যা কিছুটা অপ্রাসঙ্গিক - আনুমানিক মোট ডেটার আকার কত? এই প্রক্রিয়াটির জন্য আপনার কি কোনও পারফরম্যান্স এসএলএ পূরণ করতে হবে?
জন Seigel

উত্তর:


10

আপনি যদি পুরানো পর্যবেক্ষণটি সম্পাদন করতে চান তবে এই সমস্ত নিবন্ধের মধ্য দিয়ে লুপ করা একটি বিকল্প।

কিছু ভিন্ন বিকল্প যা আপনার ব্যবহার করা উচিত তা হ'ল:

এবং আপনি কেবলমাত্র মজাদার জন্য :-) অন্য সেশনে লুপ করার সময় এই সমস্ত বিকল্পগুলি চেষ্টা করতে পারেন।


4

আমি কেবল আমদানি এক্সপোর্ট উইজার্ডটি ব্যবহার করব। শেষে আপনাকে কার্যটি সংরক্ষণের বিকল্প দেওয়া হবে যা আপনি এসকিউএল সার্ভার এজেন্টের সাথে নির্ধারণ করতে পারবেন। নিজেকে অপারেটর হিসাবে যুক্ত করুন এবং সার্ভারে ডিবি মেল কনফিগার করুন এবং কাজটি সম্পূর্ণ হলে বা ব্যর্থ হলে এটি আপনাকে ইমেল করতে পারে।

গম্ভীরভাবে, চাকা পুনরুদ্ধার কেন?

http://msdn.microsoft.com/en-us/library/ms140052.aspx


মোটেও খারাপ নয়, আসলে এটি শেষে এসএসআইএস প্যাকেজটি সংরক্ষণ করে। এটি যদি এক সময় কেবলমাত্র কাজ হয় তবে এটি সমাধান হতে পারে।
মারিয়ান

2

অন্যরা বলেছে যে বিসিপি দ্রুততম হওয়া উচিত তবে আমি সিএলআর সমাধানের মাধ্যমে কোনও সুবিধা দেখছি না। ডাটাবেস টেবিলগুলিতে সন্নিবেশ করানোর সময় বিভিন্ন বাল্ক অনুলিপি প্রয়োগগুলি সর্বদা জয়ী হবে। এটি মূলত যেভাবে তারা লগিংকে ছোট করে এবং বহু-থ্রেডযুক্ত লেখাগুলি সক্ষম করে। ফ্ল্যাট ফাইলে লেখার সময় আপনার কাছে এই প্রতিবন্ধকতা নেই।

আমার কাজে, আমরা একটি ফাইলের ক্যোয়ারী আউটপুট ডাম্প করতে একটি সিএলআর ব্যবহার করি। আমরা আয়নিক.জপ.ডিলও অন্তর্ভুক্ত করি যাতে তৈরি হওয়ার পরে ফাইলটি স্বয়ংক্রিয়ভাবে জিপ করা যায়।

অপ্ট ব্লবগুলিতে বিসিপির চেয়ে দ্বিগুণ দ্রুত বলে দাবি করে এমন একটি উদাহরণ এখানে: /programming/


বিশেষ প্রশ্নটি খুব বিস্তারিত নয়। আমি আপনাকে নীচের প্রশ্নটি পড়ার পরামর্শ দিচ্ছি - এখানে বিএলওবি ডেটার জন্য বিসিপি পারফরম্যান্স অনুকূল করা । এটি অবশ্যই আপনার বিসিপি :-)- এর সাথে প্লে করার অনেকগুলি বিকল্প সম্পর্কে অবশ্যই ধারণা দেবে।
মেরিয়ান

আমি লিঙ্কগুলি দেখতে এবং সম্পূর্ণ সম্মত। তবে বেশিরভাগ অপ্টিমাইজেশন পয়েন্টগুলি স্কেল সার্ভারে ডেটা লোড করার জন্য। কোনও ফ্ল্যাট ফাইলে এসকিএল ডেটা লেখার সময় আমি বিসিপি সম্পর্কিত কোনও তথ্য স্ট্রাইটরাইটার বা ফাইল স্ট্রিম সিএলআর সমাধানের চেয়ে দ্রুত হতে দেখিনি।
ব্রায়ান

1

আপনি একটি সাধারণ এসএসআইএস প্যাকেজ তৈরি করতে পারেন:

কীভাবে করবেন তা এখানে একটি উচ্চ-স্তরের:

  1. সংযোগ ব্যবস্থাপকের ডাটাবেসে একটি OLEDB সংযোগ তৈরি করুন
  2. কন্ট্রোল ফ্লোতে একটি ডেটা ফ্লো ট্রান্সফর্মেশনটি টেনে আনুন এবং তারপরে ডেটা প্রবাহে পেতে এটিতে ক্লিক করুন।
  3. সরঞ্জাম বাক্স থেকে একটি ওএইএলডিবি উত্সটিকে ডেটা প্রবাহে টেনে আনুন এবং এটি সম্পাদনা করুন যাতে আপনি পদক্ষেপ 1 এ তৈরি করা সংযোগটি ব্যবহার করে এটি আপনার পছন্দসই টেবিলের সাথে সংযুক্ত হন
  4. সরঞ্জাম বাক্স থেকে ডেটা প্রবাহের মধ্যে একটি ফ্ল্যাট ফাইল গন্তব্য টেনে আনুন এবং এটির সাথে OLEDB উত্সটি সংযুক্ত করুন।
  5. ফ্ল্যাট ফাইলের গন্তব্যে "নতুন" নির্বাচন করুন এবং এটি একই কলাম কাঠামো সহ একটি নতুন ফ্ল্যাট ফাইল তৈরি করবে এবং আপনি আপনার পছন্দসই ডিলিমিটার ব্যবহার করতে পারেন, বা যদি এটি পছন্দ করেন তবে ফাইলের সাথে কোনও স্থিরও করতে পারেন।
  6. চালাও এটা.

যে কোনও নুব এই বিষয়টি বুঝতে সক্ষম হবে। একজন এন্টি-জিইউআই ব্যক্তি এই সমাধানটি পছন্দ করবেন না, সুতরাং সেই বিষয়ে মন্তব্যগুলি সংরক্ষণ করুন, এটি বিসিপি ব্যবহার করে লড়াই করা কম প্রযুক্তির জ্ঞান ব্যক্তিদের জন্য কেবলমাত্র একটি বিকল্প ...

ডেটা ফাইলটি কীভাবে ফর্ম্যাট করা যায় তাতে আপনার আরও কিছুটা নমনীয়তা রয়েছে। আপনি এটি বিসিপিতে এবং সমস্ত কিছুতে করতে পারেন, তবে এটি জটিলতাটি এটিকে বাইরে নিয়ে যায়। তবে আপনি একটি কাস্টম ফাইল শিরোলেখ রাখতে পারেন এবং প্রথম সারিতে একটি "কলামের নাম" তৈরি করতে পারেন এমন একটি ছোট সুবিধা রয়েছে যা ফ্ল্যাট ফাইলটিকে আরও বেশি মানুষের গ্রাসযোগ্য করে তোলে।

এটি সংরক্ষণ করতে ভুলবেন না, আপনি যদি এটি একবার তৈরি করেন তবে আপনাকে সম্ভবত আবার জিজ্ঞাসা করা হবে! আশাকরি এটা সাহায্য করবে..


0

আমি মনে করি কমান্ডলাইন থেকে bcp.exe দ্রুততম হওয়া উচিত।

http://msdn.microsoft.com/en-us/library/ms162802.aspx


5
আপনি যখন সঠিক হতে পারেন, আপনি কি এই সমাধান সম্পর্কে বিশদ সম্পর্কে কিছু আলোকপাত করতে পারেন? এটি কীভাবে ব্যবহৃত হয় (ডক্সের লিঙ্কটি যথেষ্ট হতে পারে), আপনি কেন এটি দ্রুত বলে মনে করেন
dezso
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.