পোস্টগ্রিজ এসকিউএলে চিত্রগুলি সংরক্ষণ করা


111

ঠিক আছে, সুতরাং আমি এমন একটি অ্যাপ্লিকেশন নিয়ে কাজ করছি যা লিনাক্সের ব্যাক-এন্ড চলমান পোস্টগ্রাইএসকিউএল ব্যবহার করবে যা উইন্ডোজ বাক্সে সি # .NET এ লেখা ফ্রন্ট এন্ড সহ চিত্রগুলি পরিবেশন করতে ব্যবহার করবে, যদিও সামনের দিকের প্রান্তটি খুব কমই গুরুত্বপূর্ণ। আমার প্রশ্নটি হ'ল:

  • পোস্টগ্রিসে চিত্রগুলি সংরক্ষণ করার সর্বোত্তম উপায় কী?

চিত্রগুলি প্রতিটি প্রায় 4-6 মেগাপিক্সেল এবং আমরা 3000 এর উপরে বাড়িয়ে সংরক্ষণ করছি note এটি লক্ষ্য করা ভালও হতে পারে: এটি কোনও ওয়েব অ্যাপ্লিকেশন নয়, প্রায় একবারেই ডেটাবেস অ্যাক্সেস করতে প্রায় দুটি ফ্রন্ট-এন্ড থাকবে।

উত্তর:


64

২০১২-এ আপডেট করা, যখন আমরা দেখতে পাচ্ছি যে সমস্ত অ্যাপ্লিকেশনগুলিতে চিত্রের আকার এবং চিত্র সংখ্যা বাড়ছে এবং বাড়ছে ...

থাম্বনেইলের মতো "আসল চিত্র" এবং "প্রক্রিয়াজাত চিত্র" এর মধ্যে আমাদের কিছু পার্থক্য প্রয়োজন।

জ্যাকবির উত্তর যেমন বলে, সেখানে দুটি বিকল্প আছে, তবে আমি সুপারিশ করছি:

  • ব্লব ব্যবহার করুন (বাইনারি লার্জ ওবজেক্ট): আসল ইমেজ স্টোরের জন্য, আপনার টেবিলে। ইভানের উত্তর (ব্লবগুলি ব্যাক আপ করতে কোনও সমস্যা নেই!), পোস্টগ্র্যাসএসকিউএল অতিরিক্ত সরবরাহিত মডিউল , হাও-টাস ইত্যাদি দেখুন

  • ডিবিলিঙ্ক সহ একটি পৃথক ডাটাবেস ব্যবহার করুন : মূল চিত্রের স্টোরের জন্য, অন্য (ইউনিফাইড / বিশেষায়িত) ডাটাবেসে। এই ক্ষেত্রে, আমি পছন্দ bytea কিন্তু ফোঁটা একই কাছে। "ইউনিফাইড ইমেজ ওয়েবসার্ভিস" এর জন্য ডাটাবেসকে আলাদা করা সবচেয়ে ভাল উপায়।

  • ব্যবহারের bytea (বাইট এরে): চিত্র থাম্বনেল ক্যাশে জন্য। ছোট ব্রাউজারগুলিকে এটি দ্রুত ওয়েব ব্রাউজারে প্রেরণ করতে (রেন্ডারিং সমস্যাগুলি এড়ানোর জন্য) ক্যাশে করুন এবং সার্ভার প্রক্রিয়াজাতকরণ হ্রাস করুন। প্রস্থ এবং উচ্চতার মতো ক্যাশেও প্রয়োজনীয় মেটাডেটা। ডেটাবেস ক্যাচিং সবচেয়ে সহজ উপায়, তবে আপনার প্রয়োজনীয়তা এবং সার্ভারের কনফিগারেশনগুলি পরীক্ষা করুন (উদাঃ অ্যাপাচি মডিউল): ফাইল সিস্টেমে থাম্বনেইলগুলি স্টোর করতে পারফরম্যান্সের তুলনা করা আরও ভাল। মনে রাখবেন যে এটি একটি (ইউনিফাইড) ওয়েব-পরিষেবা, তারপরে অনেকগুলি টেবিল পরিবেশন করে কোনও পৃথক ডাটাবেসে (কোনও ব্যাকআপ নেই) be আরও দেখুন পোস্টগ্রি বাইনারি ধরনের তথ্য ম্যানুয়াল , bytea কলাম সহ পরীক্ষার ইত্যাদি

দ্রষ্টব্য 1: আজ "দ্বৈত সমাধান" (ডাটাবেস + ফাইল সিস্টেম) এর ব্যবহার হ্রাস করা হয়েছে (!)। দ্বৈত পরিবর্তে "কেবল ডাটাবেস" ব্যবহার করার অনেক সুবিধা রয়েছে। PostgreSQL রফতানি / আমদানি / ইনপুট / আউটপুট জন্য তুলনামূলক কর্মক্ষমতা এবং ভাল সরঞ্জাম রয়েছে have

NOTE2: স্মরণ পোস্টগ্রি শুধুমাত্র আছে bytea , একটি ডিফল্ট ওরাকল এর নেই Blob : "এসকিউএল মান সংজ্ঞায়িত (...) Blob ইনপুট বিন্যাস bytea থেকে আলাদা, কিন্তু প্রদত্ত কার্যকারিতা ও অপারেটরদের বেশিরভাগই একই।", ম্যানুয়াল


সম্পাদনা 2014 : আমি আজ উপরের মূল পাঠ্যটি পরিবর্তন করিনি (আমার উত্তর 22 এপ্রিল '12, এখন 14 টি ভোট সহ), আমি আপনার পরিবর্তনের উত্তর খুলছি (দেখুন "উইকি মোড", আপনি সম্পাদনা করতে পারেন!), প্রুফরিডিংয়ের জন্য এবং আপডেটের জন্য
প্রশ্নটি স্থিতিশীল (@ আইভান্সের '08 টি উত্তর 19 টি ভোট), দয়া করে এই পাঠ্যটিকে উন্নত করতে সহায়তা করুন।


2
"..." ডুয়াল সলিউশন "(ডাটাবেস + ফাইল সিস্টেম) এর ব্যবহার অবমাননিত ..." এর জন্য রেফারেন্স কী?
ডেঙ্গেল

2019 এর কিছু খবর! যেহেতু 2018 পোস্টগ্রিস্ট ওয়েবে বাইটিয়া সরাসরি আউটপুট সমর্থন করে। এটি ব্যবহারের জন্য এই এনজিআইএনএক্স সাধারণ কনফিগারেশনটি দেখুন । বাইনারি আউটপুট সম্পর্কিত পোস্টগ্রিস্ট গাইড
পিটার ক্রাউস

52

জেকবির উত্তর:

বাইটিয়া একটি "সাধারণ" কলাম হ'ল এর অর্থ হ'ল আপনি যখন এনেছেন তখন মানটি সম্পূর্ণরূপে মেমোরিতে পড়ে। ব্লবস, বিপরীতে, আপনি স্টডআউটে প্রবাহিত করতে পারেন। এটি সার্ভারের মেমরির পদচিহ্ন হ্রাস করতে সহায়তা করে। বিশেষত, যখন আপনি 4-6 এমপিক্স চিত্র সঞ্চয় করেন।

ব্লবস ব্যাক আপ নিয়ে কোনও সমস্যা নেই। ব্যাকআপে বড় অবজেক্টগুলিকে অন্তর্ভুক্ত করার জন্য pg_dump "-b" বিকল্প সরবরাহ করে।

সুতরাং, আমি pg_lo_ * ব্যবহার পছন্দ করি, আপনি অনুমান করতে পারেন।

রে ক্রিস এরিকসনের উত্তর:

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

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


14
10 বছর পরে, আপনি কি মনে করেন যে আপনার পয়েন্টগুলি এখনও কার্যকর? তারপরে কোন আপডেট?
লেভেনটুভার

3
@ লেভেনটুনভার নং, পয়েন্টগুলি ধরে রাখবেন না। উদাহরণস্বরূপ BYTEAএকটি "সাধারণ" কলাম হওয়া সম্পর্কে প্রথম । পোস্টগ্র্রেস বহু বছর ধরে কলামগুলিতে / থেকে স্ট্রিমিং সমর্থন করে BYTEA, যার অর্থ আপনাকে ডিবিতে সংরক্ষণ করার আগে সামগ্রীগুলি মেমোরিতে সংরক্ষণ করতে হবে না।
অলিগোফ্রেন

29

ডাটাবেসে, দুটি বিকল্প রয়েছে:

  • bytea। ব্যাকআপের অংশ হিসাবে রফতানি করা কলামে ডেটা সঞ্চয় করে। সংরক্ষণ এবং পুনরুদ্ধার করতে স্ট্যান্ডার্ড ডাটাবেস ফাংশন ব্যবহার করে। আপনার প্রয়োজনের জন্য প্রস্তাবিত।
  • ব্লব। ব্যাকআপের অংশ হিসাবে সাধারণত রফতানি হয় না, বাহ্যিকভাবে ডেটা সঞ্চয় করে। সংরক্ষণ এবং পুনরুদ্ধার করতে বিশেষ ডাটাবেস ফাংশন প্রয়োজন।

আমি হাজার হাজার সারি সহ 10+ গিগাবাইট চিত্র সংরক্ষণ করে অতীতে সাফল্যের সাথে বাইটা কলামগুলি ব্যবহার করেছি। পিজির টোস্ট কার্যকারিতা ব্লবসের যে কোনও সুবিধা উপকার করে। ফাইল নাম, সামগ্রী-প্রকার, মাত্রা ইত্যাদির ক্ষেত্রে আপনাকে মেটাডেটা কলামগুলি অন্তর্ভুক্ত করতে হবে either


1
10 জিবি তেমন কিছু নয় :-( আমি টিবিএস সমাধান খুঁজছি
ভ্যালেন্টিন হেইনিটজ

2
টিভির জন্য ভ্যালেন্টিনহেইনজিৎস, ভ্যানিলা পোস্টগ্র্রেস এমনকি ছোট পাঠ্য কলামগুলির সাথে লড়াই করে।
sudo

23

২০১৫ এর মাঝামাঝি সময়ে দ্রুত আপডেট:

আপনি পোস্টগ্রিস বিদেশী ডেটা ইন্টারফেস ব্যবহার করতে পারেন , ফাইলগুলি আরও উপযুক্ত ডাটাবেসে সংরক্ষণ করতে। উদাহরণস্বরূপ, ফাইলগুলি একটি গ্রিডেএসে রাখুন যা মঙ্গোডিবি অংশ part তারপরে এটি পোস্টগ্রিসে অ্যাক্সেস করতে https://github.com/EnterpriseDB/mongo_fdw ব্যবহার করুন ।

এর সুবিধাগুলি রয়েছে, আপনি পোস্টগ্র্রেস এবং মঙ্গোডিবিতে এটি অ্যাক্সেস / পড়তে / লিখতে / ব্যাকআপ নিতে পারবেন, এটি আপনাকে আরও নমনীয়তা দেয় তার উপর নির্ভর করে।

ফাইল সিস্টেমগুলির জন্য বিদেশী ডেটা র‌্যাপারগুলিও রয়েছে: https://wiki.postgresql.org/wiki/Foreign_data_wrappers#File_Wrappers

উদাহরণ হিসাবে আপনি এটি ব্যবহার করতে পারেন: https://multicorn.readthedocs.org/en/latest/foreign-data-wrappers/fsfdw.html (সংক্ষিপ্ত ব্যবহারের উদাহরণের জন্য এখানে দেখুন)

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


1
ধন্যবাদ .. বিদেশী ডেটা মোড়ক (ফাইল_এফডিডাব্লু) কি চিত্রগুলির জন্য লেখার অ্যাক্সেস সরবরাহ করে? আমি পোস্টগ্রেস্কলিতে একটি ফাইলসিস্টেম এবং এর মেটাডেটাতে ছবিগুলি সঞ্চয় করতে চাই, তবে আমাকেও ধারাবাহিকতা বজায় রাখতে হবে। আপনার কি কোনও সমাধান রয়েছে? অন্য কোন এক্সটেনশন উপলব্ধ আছে?
মাল্টিকর্নের

1
হ্যাঁ তাদের লেখার অ্যাক্সেস রয়েছে। তারা উভয় দিক থেকে / পুরোপুরি সামঞ্জস্যপূর্ণ। এবং না, আমি সমান সমাধান জানি না যা অজগর ছাড়াই এটি করে।
কেনিয়াকর্ন কেটসম্বুট

18

10 বছর পরে আপডেট করুন ২০০৮ সালে আপনি যে হার্ড ড্রাইভগুলিতে একটি ডাটাবেস চালাবেন তার ফাইলগুলি যে ডিস্কগুলিতে সংরক্ষণ করবে তার চেয়ে অনেক বেশি আলাদা বৈশিষ্ট্য এবং অনেক বেশি দাম পড়বে। এই দিনগুলিতে 10 বছর আগে অস্তিত্ব নেই এমন ফাইলগুলি সংরক্ষণের জন্য আরও ভাল সমাধান রয়েছে এবং আমি এই পরামর্শটি বাতিল করব এবং পাঠকদের এই থ্রেডের অন্যান্য উত্তরগুলির কয়েকটি দেখার পরামর্শ দেব।

মূল

আপনার অবশ্যই না থাকলে ডাটাবেসে চিত্রগুলি সঞ্চয় করবেন না। আমি বুঝতে পারি যে এটি কোনও ওয়েব অ্যাপ্লিকেশন নয়, তবে যদি এমন কোনও ভাগ করা ফাইল অবস্থান না থাকে যা আপনি ডাটাবেসে ফাইলের অবস্থান সংরক্ষণ করতে পারেন point

//linuxserver/images/imagexxx.jpg

তাহলে সম্ভবত আপনি দ্রুত একটি ওয়েবসভার সেট আপ করতে এবং ওয়েব ইউআরএলগুলি ডাটাবেসে (পাশাপাশি স্থানীয় পাথ) সংরক্ষণ করতে পারেন। ডেটাবেসগুলি LOB এবং 3000 চিত্র (4-6 মেগাপিক্সেল, 500K একটি চিত্র ধরে নিলে) পরিচালনা করতে পারে 1.5 ডিগ্রী ডাটাবেসের চেয়ে বড় ফাইল সংরক্ষণের জন্য অনেক বেশি স্পেস ফাইল সিস্টেম নয়।


15
তবে আপনাকে বেশ কয়েকটি ডিরেক্টরিতে ফাইল বিতরণ করার উপায় নিয়ে আসতে হবে। একক ডিরেক্টরিতে মিলিয়ন ফাইল সংরক্ষণ করার ক্ষেত্রে ফাইল
সিস্টেমগুলি তেমন

1
মূল প্রশ্নের উত্তর দেয় না। আমি ব্যক্তিগতভাবে পোস্টগ্র্যাসে চিত্রগুলি সঞ্চয় করতে দেখছি কারণ এসকিউএলকে আমার বিমূর্ততার স্তর হিসাবে চাই এবং আমার এক্সট 4 ফাইল সিস্টেমে ফাইলগুলি পরিচালনা করতেও চাই না।
সুডো

আমি দ্বন্দ্ব বোধ করছি, এটি প্রশ্নের উত্তর দেয় না, তবে আমি এটিকে অগ্রাহ্য করেছি, কারণ এটি প্রশ্নের উত্তরের চেয়ে উত্তম উত্তর।
অ্যান্ড্রু ক্যার

6

এই চেষ্টা করুন । আমি উত্পন্ন পিডিএফ ডকুমেন্টগুলি সংরক্ষণের জন্য লার্জ অবজেক্ট বাইনারি (এলওবি) ফর্ম্যাটটি ব্যবহার করেছি, যার মধ্যে কয়েকটি 10+ এমবি আকারের একটি ডাটাবেসে ছিল এবং এটি আশ্চর্যরকমভাবে কাজ করেছিল।


2

আপনার চিত্রগুলি যদি ছোট হয় তবে সাধারণ পাঠ্যের ক্ষেত্রে এটি বেস 64 হিসাবে সংরক্ষণ করার কথা বিবেচনা করুন।

কারণটি হ'ল যখন বেস 64 এর ওভারহেড 33% থাকে, সংক্ষেপণ সহ বেশিরভাগ দূরে চলে যায়। (দেখুন বেস 64 এনকোডিংয়ের স্পেস ওভারহেড কী? ) আপনার ডাটাবেসটি আরও বড় হবে, তবে আপনার ওয়েবসভারটি ক্লায়েন্টকে যে প্যাকেটগুলি প্রেরণ করবে তা সেগুলি হবে না। এইচটিএমএলে, আপনি <img src = ""> ট্যাগে বেস 64 কে ইনলাইন করতে পারেন, যা সম্ভবত আপনার অ্যাপ্লিকেশনটিকে সহজতর করতে পারে কারণ আপনাকে আলাদা ব্রাউজার আনার ক্ষেত্রে চিত্রগুলিকে বাইনারি হিসাবে পরিবেশন করতে হবে না। চিত্রগুলি পাঠ্য হিসাবে হ্যান্ডেল করা যখন আপনাকে জসন প্রেরণ / গ্রহণ করতে হয় তখন জিনিসগুলিও সরল করে তোলে যা বাইনারি খুব ভালভাবে পরিচালনা করে না।

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

থাম্বনেইলগুলি হ্যান্ডেল করার জন্য এটি অবশ্যই সঠিক উপায়।

(ও.পি. এর চিত্রগুলি ছোট নয়, সুতরাং এটি আসলে তাঁর প্রশ্নের উত্তর নয়।)

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