মাইএসকিলডাম্প থেকে রেকর্ডের সংখ্যা সীমাবদ্ধ?


137

আমি একটি বড় ডাটাবেস থেকে একটি পরীক্ষামূলক ডাটাবেসে রেকর্ডের একটি ছোট নমুনা লোড করার চেষ্টা করছি।

আপনি 8 মিলিয়নের মধ্যে কেবলমাত্র আপনাকে রেকর্ড দেওয়ার জন্য কীভাবে মাইএসকিএলডাম্পকে বলবেন?

ধন্যবাদ

উত্তর:


212

যেমন স্ক্যাফম্যান বলেছেন, - যে কোনও বিকল্পটি ব্যবহার করুন :

mysqldump --opt --where="1 limit 1000000" database

অবশ্যই, এটি আপনাকে প্রতিটি টেবিল থেকে প্রথম মিলিয়ন সারি দেবে।


15
সীমাবদ্ধতার আগে "1" কী করে?
ফোব

31
@ ফোব: - কোথাও বিকল্পটি মূলত ফর্মের একটি প্রশ্নের সাথে সংযুক্ত করা হয় SELECT * from table WHERE , সুতরাং এক্ষেত্রে আপনি পাবেন SELECT * from table WHERE 1 limit 1000000। ১ টি ছাড়া আপনার একটি অবৈধ ক্যোয়ারী থাকবে। যেখানে ক্লজটির জন্য 1 নির্দিষ্ট করা (যেহেতু 1 সর্বদা সত্য) কেবল সমস্ত রেকর্ড নির্বাচন করে।
অ্যাডাম বেলায়ার

24
বাহ, কি একটা হ্যাক। সুতরাং আপনি মূলত এসকিউএল নিজেকে এইভাবে ইনজেক্ট করতে পারেন।
ফোব

6
এটি কি সমস্ত বিদেশী কী সংহততা বজায় রাখে? যদি না হয়, তা করার কোনও উপায় আছে?
keithxm23

4
ধন্যবাদ! অতিরিক্ত হিসাবে, আপনি ব্যবহার করতে পারেন: mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database 1 মিলিয়ন রেকর্ডের দ্বিতীয় পৃষ্ঠাটি পেতে। কেবলমাত্র ডেটা ডাম্প করার জন্য প্রথম ব্যতীত অন্য পৃষ্ঠাগুলিতে --no-create-info পতাকাটি ব্যবহার করার বিষয়টি নিশ্চিত করুন এবং তৈরি টেবিলের জিনিসগুলি ছেড়ে যান ।
pfuri

59

আপনি যদি nকোনও নির্দিষ্ট টেবিল থেকে রেকর্ড পেতে চান তবে আপনি এই জাতীয় কিছু করতে পারেন:

mysqldump --opt --where="1 limit 1000000" database table > dump.sql

এটি 1000000টেবিল থেকে প্রথম সারিগুলি tableফাইলে নামিয়ে দেবে dump.sql


9

মাইএসকিএলডাম্পকে কার্যকর করার জন্য একটি এসকিউএল কোয়েরি দেওয়া যেতে পারে, যা থেকে এটি ডাম্পের ডেটা নেবে। তারপরে সারিগুলির সংখ্যা সীমাবদ্ধ করতে আপনি আপনার ক্যোয়ারিতে "সীমাবদ্ধ এক্স" ধারাটি ব্যবহার করতে পারেন।


7

ডিফল্ট অর্ডার যেমন ASC যা আপনি এই পরিস্থিতিতে খুব কমই চান তাই ডিইএসসিটিকে বাক্সের বাইরে নিয়ে যেতে আপনার একটি সঠিক ডাটাবেস নকশা থাকা দরকার। যদি আপনার সমস্ত টেবিলের একই নামের (প্রাকৃতিক বা সারোগেট) সাথে একটি প্রাথমিক কী কলাম থাকে তবে আপনি সহজেই এনটি সর্বশেষ রেকর্ডগুলি ডাম্প করতে পারেন:

mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql

আপনার সর্বদা আপনার পিকে আইডি নামকরণ এবং সংযুক্ত পিকে, এমনকি সংযুক্তি টেবিলগুলিতেও (এর পরিবর্তে সরোগেট কীগুলি ব্যবহার করা উচিত) এড়ানো উচিত এটির একটি সঠিক কারণ ।


1
এটি করুন (নাম আইডি করুন এবং যৌগিক পিকে'কে এড়িয়ে চলুন) এবং আপনাকে সম্পর্কিত ডেটাবেস তত্ত্ব উপেক্ষা করতে হবে।
এমপ্লেটো

1
প্রকৃতপক্ষে, আপনি যদি ডেটাবেস এবং সত্তার উপর ভিত্তি করে আপনার পিকে ডিফল্ট করে রিলেশনাল ডাটাবেসের সেরা অনুশীলন অনুসরণ করে আপনার ডাটাবেসটি ডিজাইন করেন, আপনি উদাহরণস্বরূপ --option - "= 1 LIMIT 10000" ব্যবহার করতে পারেন। অর্ডার দ্বারা না করে, এটি কাজ করবে কারণ মাইএসকিউএল প্রাকৃতিক পদ্ধতিতে আদেশ করবে, এটি পিকে সূচক আদেশটি অনুসরণ করবে তা বলার সমতুল্য কী। তারপরে, সম্পর্কিত সারণীর সমস্ত এফকে কেবলমাত্র তাদের ডেটা থাকবে যা তাদের রেফারেন্সের টেবিলে বিদ্যমান কারণ ক্রমটি একই হবে।
এমপোলেটটো

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

@mpoletto - কোথাও = "1 LIMIT 10000" শুধুমাত্র 10000 প্রথম এন্ট্রি বেছে নেবে। আমার উত্তরের পুরো বিষয়টিটি ছিল আপনি সর্বশেষতম এক্স এন্ট্রিগুলি কীভাবে সমাধান করবেন তা দেখানো ছিল, যা সাধারণত আপনি চান। "রিলেশনাল ডাটাবেস তত্ত্ব উপেক্ষা" এর সাথে নামকরণের কনভেনশনগুলির কী সম্পর্ক রয়েছে তা আমিও বুঝতে পারি না, আমার ধারণা আপনি আমার উত্তরটি ভুল বুঝতে পেরেছিলেন। ইএফ, জ্যাঙ্গো ওআরএম ইত্যাদির মতো সর্বাধিক জনপ্রিয় ওআরএমগুলি পিকে-কলামগুলির জন্য "আইডি" কে ডিফল্ট এবং পরামর্শ দেয়, যেহেতু কেবল ইউজার.ইডের পরিবর্তে ইউজার.ইউজার_আইডি বলা বাড়াবাড়ি।
আন্দ্রেয়াস বার্গস্ট্রোম

যখন আপনি বলেন যে আপনার "কেন সর্বদা আপনার পিকে আইডি রাখা উচিত এবং যৌগিক পিকে'র এড়ানো উচিত তার সঠিক কারণ রয়েছে" আপনি রিলেশনাল ডাটাবেস তত্ত্বকে উপেক্ষা করছেন। "সর্বাধিক জনপ্রিয় ওআরএম" সম্পর্কে আপনার যুক্তি বৈধ নয় কারণ এই ORM গুলি কাজ করতে আইডি সহ টেবিলের প্রয়োজন।
এমপোলেটটো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.