| From: | Metin Guler <eng(dot)metin(at)gmail(dot)com> |
|---|---|
| To: | pgsql-tr-genel(at)postgresql(dot)org |
| Subject: | Re: Re: [pgsql-tr-genel] PostgreSQL Çok Kullanıcılı Veritabanı Tasarlama |
| Date: | 2016-04-23 11:11:09 |
| Message-ID: | 571B584D.5030601@gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-tr-genel |
Can beyin 2 çözümüde güzel, üzerinde düşünüp denemeler yaptım.
İnheritance ile tablo oluşturmak, çoklu güncellemeleri kolaylaştırdı,
güzel oldu:)
Her kullanıcıya bir şema tanımlamak bana daha güzel geldi. Bir
genel/master şemadan kullanıcı şemalarını inherit ederek oluştururum.
Genel sorgular master şemadan, özel sorgular kendi şemalarından, şema
güncellemeleride masterdan yapılıp hepsine otomatik dağılacak.
Bir şemada onbinlerce tablo olmasındansa 2000 civarı şema daha
kullanılabilir geldi.
Atıf bey bahsettiğiniz şema yönetim sorunları nelerdir?
Row based permission özelliğinide nasıl kullacanığıma emin olamadım :).
Sanırım bahsettiğiniz özellik bu
http://www.postgresql.org/docs/9.5/static/ddl-rowsecurity.html
Bu arada cevaplarınız için teşekkür ederim.
İyi çalışmalar,
Metin Güler.
22/04/16 19:20 tarihinde M.Atıf Ceylan yazdı:
> Can hocamın ilk yöntemi bence daha makul. O kadar çok schema kullanmak
> yönetilebilirlik yönünden sorun oluşturuyor. Biz de şuan ilk senaryoya
> benzer bir mantıkla çalışıyoruz. Neticede part edebileceğiniz key
> elinizde çok net, user_id. 9.5 ile gelen row based permission ile
> otomatik olarak güvenliği sağlamış oluyorsunuz, user'a özel inherited
> tablo ile de böl/parçala/yönet yapıyorsunuz ;)
>
> On 04/22/2016 07:04 PM, N. Can KIRIK wrote:
>> Merhaba,
>>
>> Çok iyi bir fikir olmayabilir ama "user_id" bazında PARTITION yaparak
>> bir ana tablo altında her kullanıcıya ayrı tablo yapabilirsiniz.
>> Tablo silme yapmanız gerekmeyeceği için de bir fonksiyon ile iş
>> çözülebilir. Ana tablo üzerinden de rahat rahat toplu sorgulama
>> yapabilirsiniz.
>> CREATE TABLE "public"."tablo" ( ... ); CREATE TABLE
>> "public"."tablo_123456" ( CHECK ( "kullanici_id" = 123456 ) )
>> INHERITS ( "public"."tablo" ); CREATE OR REPLACE FUNCTION
>> "public"."tablo_insert_trigger_fn"() RETURNS TRIGGER AS ..... ;
>> CREATE TRIGGER "public"."tablo_insert_trigger" BEFORE INSERT ON
>> "public."tablo" FOR EACH ROW EXECUTE PROCEDURE
>> "public"."tablo_insert_trigger_fn"(); ...
>> http://www.postgresql.org/docs/9.5/static/ddl-partitioning.html
>>
>>
>> Bir diğer alternatif de "user_id" bazında tablo yerine SCHEMA açarak,
>> PARTITION tablolarını da bu şemalara asıl isimleri ile yerleştirmeniz
>> olabilir. Bu durumda ana schema altında tüm tabloları kapsayan
>> tablolar kullanarak hem yarı izole hem ortak kullanımlı bir yapınız
>> olabilir.
>> CREATE SCHEMA "kullanici_123456"; SET search_path TO
>> "kullanici_123456"; CREATE TABLE "kullanici_123456"."tablo" ( )
>> INHERITS ( "public"."tablo" ); ....
>> http://www.postgresql.org/docs/9.5/static/ddl-schemas.html
>>
>>
>> /N. Can KIRIK
>> ePati Bilişim Teknolojileri
>> http://www.epati.com.tr//
>>
> --
>
> M.Atıf Ceylan
İyi çalışmalar, Metin Güler.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | M.Atıf Ceylan | 2016-04-23 11:51:15 | Re: Re: [pgsql-tr-genel] PostgreSQL Çok Kullanıcılı Veritabanı Tasarlama |
| Previous Message | M.Atıf Ceylan | 2016-04-22 16:20:50 | Re: Re: [pgsql-tr-genel] PostgreSQL Çok Kullanıcılı Veritabanı Tasarlama |