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

From: M(dot)Atıf Ceylan <mehmet(at)atifceylan(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:51:15
Message-ID: 571B61B3.7040305@atifceylan.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

On 04/23/2016 02:11 PM, Metin Guler wrote:
> 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?
Performans ve veritabanının çalışmasına olumsuz hiçbir etkisi olmamakla
birlikte eğer tablo sayınız hatırı sayılır bir düzeydeyse 2000 şemayı
oluşturmak bile hayli zaman alacak. Backup restore gibi süreçler
gerekirse zaman uzuyor. Ayrıca pgadmin kullanmak işkence oluyor. Eğer
gui client kullanıyorsanız farklı bir gui client kullanmanız gerekir.

> 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
>

Aynen bunu kastediyorum. Bu bence tam sizin kullanımınıza uygun. Docker
tadında tablo izolasyonu yapıyorsunuz :D:D
Bu aslında aynı tabloda durdugunda bir kullanıcının diğer kullanıcı
verilerine erişememesini sağlıyor. Tümüyle güvenlikle ilgili.

> 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.

--

M.Atıf Ceylan

In response to

Browse pgsql-tr-genel by date

  From Date Subject
Next Message M.Atıf Ceylan 2016-05-21 08:54:47 İstanbul PostgreSQL Etkinliği
Previous Message Metin Guler 2016-04-23 11:11:09 Re: Re: [pgsql-tr-genel] PostgreSQL Çok Kullanıcılı Veritabanı Tasarlama