এসকিউএলাইট সন্নিবেশ - কী কী আপডেটের উপর জালিয়াতি করা হবে (আপসেট)


98

মাইএসকিউএল এর কিছু আছে:

INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;

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

  1. নির্বাচন + (অন্তর্ভুক্ত বা আপডেট) বা
  2. আপডেট (আপডেট আপডেট ব্যর্থ হলে + অন্তর্ভুক্ত )

উত্তর:


35

৩.২৪.০.০ থেকে এসকিউএলাইট উপস্থাপনকে সমর্থন করে , সুতরাং এখন আপনি কেবল নিম্নলিখিতটি লিখতে পারেন

INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;

4
আমি ভাবছিলাম যে আপনি কি upsertএক লেনদেনে যেমন পাইথন executemany()ফাংশন দিয়ে একাধিক কাজ করতে পারেন ?
রেডিও নিয়ন্ত্রিত

118
INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;

এটির জন্য "আইপি" কলামটির একটি অনন্য (বা প্রাথমিক কী) সীমাবদ্ধতা থাকতে হবে।


সম্পাদনা: আরেকটি দুর্দান্ত সমাধান: https://stackoverflow.com/a/4330694/89771


4
কেবল রেকর্ডের জন্য, REPLACEকোনও বিকল্প নয়।
অ্যালিক্স অ্যাক্সেল

4
: "অন্য মহান সমাধান" লিঙ্কটি সংক্রান্ত আমিও একই প্রশ্ন একটি ভিন্ন উত্তর বিবেচনা করবে stackoverflow.com/a/418988/3650835
KayakinKoder

19

্যদসব UPDATE (+ INSERT if UPDATE fails)। কম কোড = কম বাগ।


4
ধন্যবাদ! @Sam ( stackoverflow.com/questions/418898/... ) আপনার সাথে একমত বলে মনে হয়। আমিও এই পদ্ধতির পছন্দ করি।
অ্যালিক্স অ্যাক্সেল

@ স্মিথ বলতে আমি বোঝাতে চাইছি প্লেইন আপডেট এবং ইনসার্ট স্টেটমেন্ট ব্যবহার করে রিটার্নের মান পরীক্ষা করা।
কোডহোলিক

এর মধ্যে পারমাণবিকতা নেই এটির মধ্যে যদি অন্য কোনও প্রক্রিয়া sertedোকানো হয় তবে INSERT ব্যর্থ হবে।
রবিন Lavall 12e

7

বর্তমান উত্তরটি কেবল স্ক্লাইট ওআর মাইএসকিএল-এ কাজ করবে (আপনি OR ব্যবহার করেন বা না ব্যবহার করে তার উপর নির্ভর করে)। সুতরাং, যদি আপনি ক্রস ডিবিএমএসের সামঞ্জস্যতা চান তবে নিম্নলিখিতগুলি ...

REPLACE INTO `visits` (ip, value) VALUES ($ip, 0);

4
গৃহীত উত্তর এসকিউএলাইটে কাজ করে (এটি আমার লক্ষ্য ছিল)। REPLACEএসকিউএলাইটেও কাজ করবে, তবে মাইএসকিউএলে এটি সর্বদা 0-এ কাউন্টারকে পুনরায় সেট করবে - যখন ক্যোয়ারী বহনযোগ্য হবে, তবে ফলাফলটি অনেকটাই আলাদা হবে।
অ্যালিক্স অ্যাক্সেল

আপনি ঠিক বলেছেন, আমি ভেবেছিলাম যে ওপি পোর্টেবলের জন্য এমন কিছু সন্ধান করছে। আমি বুঝতে পারি যে প্রতিস্থাপনে সমস্ত ক্ষেত্রেই কাজ করবে না, যেমনটি যেখানে পিকে সংরক্ষণ প্রয়োজন, তবে অনেক ক্ষেত্রেই হবে will
জ্যাকব থমাসন

ডেটা বাতিল করার পরিবর্তে পরিষ্কারভাবে ব্যর্থ হওয়া একটি বৈশিষ্ট্য, কোনও বাগ নয়।
টুবু

-4

আপনার এটির জন্য ম্যাকচেড ব্যবহার করা উচিত কারণ এটি কোনও একক কী (আইপি ঠিকানা) একক মান (দর্শনার্থীর সংখ্যা) সংরক্ষণ করে। কোনও "রেস" শর্ত নেই তা নিশ্চিত করার জন্য আপনি পারমাণবিক বর্ধন ফাংশনটি ব্যবহার করতে পারেন।

এটি মাইএসকিউএল থেকে দ্রুত এবং লোড সংরক্ষণ করে যাতে মাইএসকিউএল অন্যান্য জিনিসগুলিতে ফোকাস করতে পারে।


যদি ডেটাটি এত গুরুত্বপূর্ণ না হয় তবে হ্যাঁ। তবে, যদি এটি এমন ব্যস্ত সাইটে ব্যবহার করা হয় যেখানে অনেকগুলি আইপি পরিষেবাটি হিট করে, মেমক্যাচ করা উদাহরণ (গুলি) পূর্ণ হতে পারে এবং কিছু সামগ্রী ফেলে দেওয়া হতে পারে। মেমক্যাচ করা সামগ্রীর ব্যাক আপ নেওয়াও আকর্ষণীয় হবে (যদি প্রয়োজন হয়)
এলিয়ট ফস্টার

@ এলিয়টফস্টার মেমক্যাচড আপনি যে পরিমাণ র‌্যাম নিক্ষেপ করেছেন তার যতটা ডেটা হ্যান্ডেল করতে পারে (আপনি যদি অধ্যবসায়ও চান তবে রেডিস বা মেমব্যাস ব্যবহার করুন)। আপনি যদি দিনে 1 মিলিয়নেরও বেশি দর্শক পেয়ে থাকেন তবে আপনি সম্ভবত আপনার মেমক্যাস উদাহরণটি 30MB র্যামের চেয়ে বেশি দিতে পারবেন (যা আমি মনে করি ডিফল্ট)। তবে, আপনি যে পরিমাণ মেমোরি দেন তার জন্য এটি অবশ্যই এসকিউএলাইট এবং মাইএসকিউএল এর চেয়ে অনেক বেশি লোড পরিচালনা করতে পারে - কেবল কোনও তুলনা নেই isn't
জিওনক্রস

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

আপনি রেডিসকে যত তাড়াতাড়ি তথ্য বজায় রাখতে কনফিগার করতে পারেন (এক্স সেকেন্ডের সংখ্যায় বা ওয়াই সংখ্যার পরিবর্তনে) want
মহিষ 10
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.