কেবল স্মৃতিতে পোস্টগ্রিএসকিউএল চালানো


110

আমি একটি ছোট PostgreSQL ডাটাবেস চালাতে চাই যা কেবল মেমরিতে চলে, প্রতিটি ইউনিট পরীক্ষার জন্য আমি লিখি। এই ক্ষেত্রে:

@Before
void setUp() {
    String port = runPostgresOnRandomPort();
    connectTo("postgres://localhost:"+port+"/in_memory_db");
    // ...
}

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

কিছু মত HSQL, তবে পোস্টগ্রিসের জন্য। আমি এটা কিভাবে করবো?

আমি কি এই জাতীয় পোস্টগ্রিজ সংস্করণ পেতে পারি? আমি কীভাবে এটি ডিস্ক ব্যবহার না করার নির্দেশ দিতে পারি?

উত্তর:


50

পোস্টগ্রিসের মাধ্যমে এটি সম্ভব নয়। এটি এইচএসকিউএলডিবি বা মাইএসকিউএলের মতো কোনও প্রসেস / ইন-মেমরি ইঞ্জিন সরবরাহ করে না।

আপনি যদি একটি স্বয়ংসম্পূর্ণ পরিবেশ তৈরি করতে চান তাহলে আপনি পারবেন না SVN মধ্যে Postgres বাইনেরিতে করা (কিন্তু এটি শুধু একটি একক এক্সিকিউটেবল বেশী)।

আপনি এটি দিয়ে কিছু করার আগে আপনার পরীক্ষা ডাটাবেস সেটআপ করতে আপনাকে initdb চালাতে হবে । এটি একটি ব্যাচ ফাইল থেকে বা রানটাইম.এক্সেক () ব্যবহার করে করা যেতে পারে। তবে লক্ষ করুন যে initdb দ্রুত এমন কিছু নয়। আপনি অবশ্যই প্রতিটি পরীক্ষার জন্য এটি চালাতে চাইবেন না। আপনার টেস্ট-স্যুটের আগে আপনি এটি চালিয়ে যেতে পারেন।

তবে এটি সম্পন্ন করার সময়, আমি একটি ডেডিকেটেড পোস্টগ্রিস ইনস্টলেশন করার পরামর্শ দিচ্ছি যেখানে আপনি পরীক্ষা চালানোর আগে কেবল আপনার টেস্ট ডাটাবেসটি পুনরায় তৈরি করেন।

আপনি একটি টেমপ্লেট ডাটাবেস ব্যবহার করে পরীক্ষা-ডাটাবেসটি পুনরায় তৈরি করতে পারেন যা এটি তৈরি করে তোলে দ্রুত ( প্রতিটি পরীক্ষার জন্য initdb চালানোর চেয়ে অনেক দ্রুত)


9
দেখে মনে হচ্ছে নীচে
এরউইনের

4
@vfclists আসলে, র‌্যামডিস্কের একটি টেবিল স্পেস সত্যিই খারাপ ধারণা। এটা করবেন না। দেখুন postgresql.org/docs/devel/static/manage-ag-tablespaces.html , stackoverflow.com/q/9407442/398670
ক্রেগ রিঙ্গার

4
@ ক্রেইগ্রিঞ্জার: এই নির্দিষ্ট প্রশ্নের জন্য স্পষ্ট করে বলতে: মূল্যবান ডেটা (এবং সতর্কতার জন্য ধন্যবাদ) এর সাথে মেশানো খারাপ ধারণা। ডেডিকেটেড ডিবি ক্লাস্টারের সাথে ইউনিট-পরীক্ষার জন্য, একটি র‌্যামডিস্ক ভাল fine
এরউইন ব্র্যান্ডসটেটার

4
ডকার ব্যবহার সাধারণ হওয়ার সাথে সাথে কিছু লোক এমন একটি সরঞ্জামের মাধ্যমে সফল হয়েছে testcontainersযা মূলত আপনার পরীক্ষার সূচনাটি একটি নিক্ষিপ্ত, ডকারাইজড, পোস্টগ্রিস-দৃষ্টান্ত দিয়ে দেয়। Github.com/testcontainers/testcontainers- java
হ্যান্স ওয়েস্টারবিক

4
@Ecrisp এটি পোস্টগ্রাসের সত্যিকারের এম্বেড সংস্করণ নয়। পোস্টগ্র্রেস দৃষ্টিকোণটি (একটি পৃথক প্রক্রিয়াতে) শুরু করা সহজ করার জন্য এটি কেবল একটি মোড়কের গ্রন্থাগার। পোস্টগ্রিসগুলি এখনও জাভা অ্যাপ্লিকেশনটির "বাহিরে" চালাবে এবং একই পদ্ধতিতে "এম্বেড" করবে না যা JVM চালায়
a_horse_with_no_name

80

( ইন-মেমরি পোস্টগ্র্রেএসকিউএল ব্যবহার করে এবং এটি জেনারালাইজেশন করা থেকে আমার উত্তর সরানো ):

আপনি মেমরি-ইন-প্রসেস পিজি চালাতে পারবেন না

আমি পরীক্ষার জন্য কীভাবে মেমরি পোস্টগ্রিস ডাটাবেস চালাতে পারি তা বুঝতে পারি না। এটা কি সম্ভব?

না, এটা সম্ভব নয়। পোস্টগ্রিএসকিউএল সি তে প্রয়োগ করা হয় এবং প্ল্যাটফর্ম কোডে সংকলিত হয়। এইচ 2 বা ডার্বির বিপরীতে আপনি কেবল jarমেমোরি ডিবি হিসাবে নিক্ষেপকারী হিসাবে লোড করতে এবং এটি জ্বালিয়ে দিতে পারবেন না ।

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

পরিবর্তে: একটি সংযোগ প্রাক কনফিগার করুন

আমি নির্দিষ্টভাবে আপনার হোস্টনাম / ব্যবহারকারীর নাম / পাসওয়ার্ডটি কাজ করার আশা করার জন্য আপনার পরীক্ষাগুলি লেখার পরামর্শ দিচ্ছি এবং পরীক্ষাটি চালানোর CREATE DATABASEপরে একটি ছুটে যাওয়া ডেটাবেস, তারপরে DROP DATABASEরান শেষে। একটি বৈশিষ্ট্য ফাইল থেকে ডাটাবেস সংযোগের বিশদটি পান, লক্ষ্য বৈশিষ্ট্য তৈরি করুন, পরিবেশের পরিবর্তনশীল ইত্যাদি vari

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

পরিবর্তে: পরীক্ষার জন্য একটি নিক্ষেপ পোস্টগ্র্রেএসকিউএল উদাহরণ চালু করুন

অথবা, যদি আপনি করছি সত্যিই পছন্দ করা আপনি করতে পারে আছে আপনার পরীক্ষার সাজ সনাক্ত initdbএবং postgresবাইনেরিতে, চালানো initdbএকটি ডাটাবেস তৈরি করতে, সংশোধন pg_hba.confকরতে trust, চালানো postgresএকটি র্যান্ডম পোর্টে এটা শুরু করার জন্য, একটি ব্যবহারকারী তৈরি, একটি ডিবি তৈরি, এবং পরীক্ষা সঞ্চালিত হবে । এমনকি আপনি জারে একাধিক আর্কিটেকচারের জন্য পোস্টগ্রাইএসকিউএল বাইনারিগুলি বান্ডিল করতে পারেন এবং পরীক্ষাগুলি চালানোর আগে বর্তমান স্থাপত্যের জন্য একটি অস্থায়ী ডিরেক্টরিতে আনপ্যাক করতে পারেন।

ব্যক্তিগতভাবে আমি মনে করি এটি একটি প্রধান ব্যথা যা এড়ানো উচিত; এটি কেবল একটি পরীক্ষা ডিবি কনফিগার করা সহজ। যাইহোক, include_dirসমর্থনের আগমনের সাথে এটি কিছুটা সহজ হয়ে গেছে postgresql.conf; এখন আপনি কেবল একটি লাইন যুক্ত করতে পারেন, তারপরে বাকী সমস্তগুলির জন্য একটি উত্পন্ন কনফিগারেশন ফাইল লিখুন।

পোস্টগ্রিসএসকিউএল সহ দ্রুত পরীক্ষা করা

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

এইচ 2 এর পোস্টগ্রিসএসকিউএল উপভাষাটি সত্যিকারের বিকল্প নয়

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

এইচ 2 কিছু পোস্টগ্রিসকিউএল এক্সটেনশান সমর্থন করে এবং পোস্টগ্রেএসকিউএল ডায়ালিট অনুকরণ করে। যাইহোক, এটি ঠিক - একটি অনুকরণ। আপনি এমন অঞ্চলগুলি খুঁজে পাবেন যেখানে এইচ 2 কোনও জিজ্ঞাসা গ্রহণ করে কিন্তু পোস্টগ্র্যাসকিউএল দেয় না, যেখানে আচরণের পার্থক্য রয়েছে ইত্যাদি ইত্যাদি । আপনি লেখার সময় উইন্ডো ফাংশনগুলির মতো - পোস্টগ্র্রেএসকিউএল এমন কোনও কিছু করার পক্ষে সমর্থন করেন যেখানে পোস্টগ্রাইএসকিউএল সমর্থন করে of

আপনি যদি এই পদ্ধতির সীমাবদ্ধতা বুঝতে এবং আপনার ডাটাবেস অ্যাক্সেস সহজ হয় তবে H2 ঠিক আছে। তবে সেক্ষেত্রে আপনি সম্ভবত কোনও ওআরএমের জন্য আরও ভাল প্রার্থী যা ডাটাবেসটিকে বিমূর্ত করে দেয় কারণ আপনি যেভাবেই এর আকর্ষণীয় বৈশিষ্ট্যগুলি ব্যবহার করছেন না - এবং সেই ক্ষেত্রে আপনাকে আর ডাটাবেসের সামঞ্জস্যতা নিয়ে যত্ন নেওয়ার দরকার নেই।

টেবিল স্পেসের উত্তর নয়!

"ইন-মেমরি" ডাটাবেস তৈরি করতে কোনও টেবিল স্পেস ব্যবহার করবেন না । এটি যেভাবেই পারফরম্যান্সকে উল্লেখযোগ্যভাবে সহায়তা করবে না কেবল এটি অপ্রয়োজনীয়ই নয়, একই পোস্টগ্রিসকিউএল ইনস্টল করে আপনার যত্ন নেওয়া অন্য যে কোনও অ্যাক্সেস ব্যাহত করার এটিও দুর্দান্ত উপায়। 9.4 ডকুমেন্টেশনে এখন নিম্নলিখিত সতর্কতা রয়েছে :

সতর্কতা

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

কারণ আমি লক্ষ্য করেছি যে অনেক লোক এটি করছে এবং সমস্যায় পড়েছে।

(আপনি যদি mkdirএটি করেন তবে পোস্টগ্রিএসকিউএল আবার শুরু করার জন্য আপনি টেবিল স্পেস ডিরেক্টরিটি অনুপস্থিত রাখতে পারেন, তারপরে DROPঅনুপস্থিত ডাটাবেস, টেবিল ইত্যাদি, এটি না করা ভাল))


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

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

ঠিক আছে, এটি "আমি যা ভেবেছিলাম" এবং "খুব ভয়ঙ্কর" উভয়ই, র্যামড্রাইভ সমাধানটি কেবল একটি স্থানীয় ডিবিতে অন্তর্ভুক্ত যার কোনও কার্যকর ডেটা নেই। তবে কেন কেউ নিজের মেশিন নয় এমন মেশিনের বিরুদ্ধে ইউনিট পরীক্ষা চালাতে চাইবে? আপনার উত্তরের ভিত্তিতে টেবিলস্পেসগুলি + রামডিস্ক আপনার স্থানীয় মেশিনে কেবলমাত্র পিজিএসকিউএল চলার প্রকৃত ইউনিট টেস্ট ইভেন্টের জন্য পুরোপুরি বৈধ বলে মনে হচ্ছে।
গেটস ভিপি

4
@ গেটসভিপি কিছু লোক তাদের স্থানীয় মেশিনে তাদের যত্ন নেওয়ার জিনিসগুলি রাখে - যা ভাল তবে একই ডিবি ইনস্টলের বিরুদ্ধে ইউনিট পরীক্ষা চালানো কিছুটা বোকা। মানুষ নির্বোধ, যদিও। তাদের মধ্যে কিছু সঠিক ব্যাকআপ রাখে না। ওয়ালস পরের।
ক্রেগ রিঞ্জার

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

66

অথবা আপনি একটি তৈরী করতে পারে tablespace- র একটি ramfs / tempfs এবং আপনার সমস্ত বস্তু সেখানে তৈরি করুন।
আমাকে সম্প্রতি লিনাক্সে ঠিক এমনটি করা সম্পর্কে একটি নিবন্ধের দিকে ইঙ্গিত করা হয়েছিল ।

সতর্কতা

এটি আপনার পুরো ডাটাবেস ক্লাস্টারের অখণ্ডতাটিকে বিপন্ন করতে পারে ।
ম্যানুয়ালটিতে যুক্ত হওয়া সতর্কতাটি পড়ুন।
সুতরাং ব্যয়যোগ্য ডেটার জন্য এটি কেবল একটি বিকল্প।

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


4
আমি সত্যিই মনে করি এটি খারাপ পরামর্শ। এটা করো না. পরিবর্তে, initdbএকটি টেম্পস বা রামডিস্কে একটি নতুন পোস্টগ্রাস উদাহরণ। কোনও টেম্পস ইত্যাদিতে কোনও টেবিল স্পেস ব্যবহার করবেন না , এটি ভঙ্গুর এবং অর্থহীন। আপনি একটি সাধারণ টেবিল স্পেস ব্যবহার করে UNLOGGEDটেবিল তৈরি করা ভাল - এটি একইভাবে সম্পাদন করবে। এবং এটা ওয়াল কর্মক্ষমতা এবং fsync কারণের মোকাবেলার না যদি না আপনি কর্ম যে সমগ্র ডিবি (দেখুন অখণ্ডতা ঝুঁকি নেবে নিতে stackoverflow.com/q/9407442/398670 )। এটা করবেন না।
ক্রেগ রিঞ্জার

32

এখন ওপেন টেবিল থেকে এম্বেড করা পোস্টগ্রিএসকিউএল অংশের মাধ্যমে আপনার JUnit পরীক্ষাগুলিতে পোস্টগ্রিএসকিউএল-এর একটি ইন-মেমরি উদাহরণ চালানো সম্ভব: https://github.com/opentable/otj-pg-e এম্বেড করা ।

Otj-pg- এমবেড করা লাইব্রেরিতে নির্ভরতা যুক্ত করে ( https://mvnrepository.com/artifact/com.opentable.components/otj-pg- এম্বেড করা ) আপনি নিজের @ পোস্টেগ্রিজএসকিউএল এর নিজস্ব দৃষ্টান্ত শুরু করতে বা থামাতে পারেন এবং @ আফার হুকস:

EmbeddedPostgres pg = EmbeddedPostgres.start();

এমনকি আপনার জন্য আপনার পোস্টগ্রিএসকিউএল ডাটাবেস সার্ভারটি স্বয়ংক্রিয়ভাবে JUnit শুরু এবং বন্ধ করার জন্য তারা JUnit বিধি সরবরাহ করে:

@Rule
public SingleInstancePostgresRule pg = EmbeddedPostgresRules.singleInstance();

4
ছয় মাস পরে এই প্যাকেজটি নিয়ে আপনার অভিজ্ঞতা কেমন? ভাল কাজ করে, বা বাগের সাথে ধাঁধা?
অলিগোফ্রেন

@ রবস আপনি JUnit5 এ স্থানান্তরিত করেছেন? আপনি এর @Ruleসাথে প্রতিস্থাপনটি কীভাবে ব্যবহার করবেন @ExtendWith? শুধু ব্যবহার .start()মধ্যে @BeforeAll?
ফ্রেঙ্কি ড্রেক

আমি JUnit5 এ মাইগ্রেট করি নি, তাই আমি এখনও আপনার প্রশ্নের উত্তর দিতে পারি না। দুঃখিত
রুবস

এটি ভাল কাজ করেছে। ধন্যবাদ আপনি যদি চান তবে আপনার বসন্তের কনফিগারেশনে ডেটাসোর্স তৈরি করতে নিম্নলিখিতগুলি ব্যবহার করুন:DataSource embeddedPostgresDS = EmbeddedPostgres.builder().start().getPostgresDatabase();
সাকি সান

13

আপনি ব্যবহার করতে পারে TestContainers পরীক্ষার জন্য একটি PosgreSQL Docker ধারক আপ স্পিন: http://testcontainers.viewdocs.io/testcontainers-java/usage/database_containers/

টেস্টকন্টেনাররা একটি জুনিত @ বিধি / @ ClassRule সরবরাহ করে : এই মোডটি আপনার পরীক্ষাগুলির আগে একটি ধারকটির ভিতরে একটি ডাটাবেস শুরু করে এবং পরে এটি কেটে দেয়।

উদাহরণ:

public class SimplePostgreSQLTest {

    @Rule
    public PostgreSQLContainer postgres = new PostgreSQLContainer();

    @Test
    public void testSimple() throws SQLException {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setJdbcUrl(postgres.getJdbcUrl());
        hikariConfig.setUsername(postgres.getUsername());
        hikariConfig.setPassword(postgres.getPassword());

        HikariDataSource ds = new HikariDataSource(hikariConfig);
        Statement statement = ds.getConnection().createStatement();
        statement.execute("SELECT 1");
        ResultSet resultSet = statement.getResultSet();

        resultSet.next();
        int resultSetInt = resultSet.getInt(1);
        assertEquals("A basic SELECT query succeeds", 1, resultSetInt);
    }
}

8

ইয়্যান্ডেক্স নামক রাশিয়ান অনুসন্ধান সংস্থার পোস্টগ্রিএসকিউএল-র একটি ইন-মেমরি সংস্করণ রয়েছে: https://github.com/yandex-qatools/postgresql- এম্বেড

এটি ফ্ল্যাপডুডল ওএসএস এর এম্বেড প্রক্রিয়া ভিত্তিক।

ব্যবহারের উদাহরণ (গিথাব পৃষ্ঠা থেকে):

// starting Postgres
final EmbeddedPostgres postgres = new EmbeddedPostgres(V9_6);
// predefined data directory
// final EmbeddedPostgres postgres = new EmbeddedPostgres(V9_6, "/path/to/predefined/data/directory");
final String url = postgres.start("localhost", 5432, "dbName", "userName", "password");

// connecting to a running Postgres and feeding up the database
final Connection conn = DriverManager.getConnection(url);
conn.createStatement().execute("CREATE TABLE films (code char(5));");

আমি এটি কিছু সময় ব্যবহার করছি। এটা ভাল কাজ করে.

আপডেট করা : এই প্রকল্পটি আর সক্রিয়ভাবে পরিচালিত হচ্ছে না

Please be adviced that the main maintainer of this project has successfuly 
migrated to the use of Test Containers project. This is the best possible 
alternative nowadays.

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

3

অবিচ্ছিন্নভাবে কোনও মেমরির ডাটাবেস অবলম্বন না করে পারফরম্যান্স অর্জনের জন্য আপনি পোস্টগ্রিজএসকিউএল কনফিগারেশন সেটিংসও ব্যবহার করতে পারেন (যেমন প্রশ্নে বিশদযুক্ত এবং এখানে স্বীকৃত উত্তরের মতো ) performance


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

2

আপনি যদি নোডজেএস ব্যবহার করে থাকেন তবে পোস্টগ্রিস ডিবি-র সর্বাধিক সাধারণ বৈশিষ্ট্য অনুকরণ করতে আপনি পিজি -মেম (অস্বীকৃতি: আমি লেখক) ব্যবহার করতে পারেন ।

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

আমি এখানে আপনার ইউনিট পরীক্ষার জন্য এটি কীভাবে ব্যবহার করব তা প্রদর্শন করতে একটি নিবন্ধ লিখেছিলাম ।


দারুণ লাগছে! আমি দরকারী কিছু সরঞ্জাম আমি CURRENT_TIMESTAMP, SUM (), এনাম সমর্থন অনুপস্থিত তবে বাকিগুলি দেখতে ভাল
লাগছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.