Re: Re: [pgsql-tr-genel] PostgreSQL Çok Kullanıcılı Veritabanı Tasarlama

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.

In response to

Responses

Browse pgsql-tr-genel by date

  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