আপনি সর্বদা আপনার নিজের টেবিলকে "বস্তুগত দৃশ্য" হিসাবে পরিবেশন করতে পারেন। MATERIALIZED VIEW
পোস্টগ্রিস 9.3 তে যেভাবেই প্রয়োগ করা হয়েছিল তার আগে আপনাকে যা করতে হয়েছিল তা ।
উদাহরণস্বরূপ, আপনি একটি সমতল তৈরি করতে পারেন VIEW
:
CREATE VIEW graph_avg_view AS
SELECT xaxis, AVG(value) AS avg_val
FROM graph
GROUP BY xaxis;
এবং একবারে বা যখনই আপনার আরম্ভ করার প্রয়োজন হবে তখন ফলাফলটি সামগ্রিকভাবে রূপায়িত করুন:
CREATE TABLE graph_avg AS
SELECT * FROM graph_avg_view
(বা এটিকে SELECT
তৈরি না করে সরাসরি বিবৃতিটি ব্যবহার করুন VIEW
))
তারপরে, আপনার ব্যবহারের মামলার অজ্ঞাত বিবরণের উপর নির্ভর করে আপনি নিজেই DELETE
/ UPDATE
/ INSERT
পরিবর্তন করতে পারবেন ।
আপনার টেবিলের জন্য ডেটা-মডিফাইং সিটিই সহ একটি বেসিক ডিএমএল বিবৃতিটি হ'ল :
থেকে কেউ কিছু আর চেষ্টা ধরে নেওয়া যাক লেখার জন্য graph_avg
একই সময়ে (পড়া কোন সমস্যা নেই):
WITH del AS (
DELETE FROM graph_avg t
WHERE NOT EXISTS (SELECT 1 FROM graph_avg_view v WHERE v.xaxis = v.xaxis);
)
, upd AS (
UPDATE graph_avg t
FROM graph_avg_view v
WHERE t.xaxis = v.xaxis
AND t.avg_val <> v.avg_val
)
INSERT INTO graph_avg t
SELECT *
FROM graph_avg_view v
LEFT JOIN graph_avg t USING (xaxis)
WHERE t.xaxis IS NULL;
তবে এটি সম্ভবত অনুকূলিত করা উচিত।
বেসিক রেসিপি:
- আপনার বেস টেবিলটিতে
timestamp
ডিফল্ট সহ একটি কলাম যুক্ত করুন now()
। এটি কল করুন ts
।
- আপনার যদি আপডেট থাকে তবে প্রতিটি আপডেটের সাথে বর্তমান টাইমস্ট্যাম্প সেট করতে একটি ট্রিগার যুক্ত করুন যা পরিবর্তন হয়
xaxis
বা value
।
আপনার সর্বশেষ স্ন্যাপশটের টাইমস্ট্যাম্প মনে রাখার জন্য একটি ছোট টেবিল তৈরি করুন। আসুন এটি কল mv
:
CREATE TABLE mv (
tbl text PRIMARY KEY
, ts timestamp NOT NULL DEFAULT '-infinity'
); -- possibly more details
এই আংশিক, বহু-কলাম সূচক তৈরি করুন:
CREATE INDEX graph_mv_latest ON graph (xaxis, value)
WHERE ts >= '-infinity';
নিখুঁত সূচক ব্যবহারের সাথে স্ন্যাপশটটি রিফ্রেশ করতে আপনার ক্যোয়ারীতে প্রাকটিক হিসাবে শেষ স্ন্যাপশটের টাইমস্ট্যাম্পটি ব্যবহার করুন।
লেনদেন শেষে, সূচকটি ছেড়ে দিন এবং লেনদেনের টাইমস্ট্যাম্পের সাথে পুনরায় তৈরি করুন সূচিপত্রের প্রারিকেট (প্রাথমিকভাবে '-infinity'
) এর টাইমস্ট্যাম্পের পরিবর্তে , যা আপনি নিজের টেবিলেও সংরক্ষণ করেন। এক লেনদেনে সমস্ত কিছু ।
উল্লেখ্য যে আংশিক সূচক কভার মহান INSERT
এবং UPDATE
অপারেশন, কিন্তু না DELETE
। এটি আবরণ করার জন্য, আপনাকে পুরো টেবিলটি বিবেচনা করতে হবে। এটি সব সঠিক প্রয়োজনীয়তার উপর নির্ভর করে।