Veritabanları için özgün harddisk partitionu

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Veritabanları için özgün harddisk partitionu

Mesaj gönderen undefined »

Konunun başlığında bahsettiğim gibi hiç böyle birşey duydunuzmu ? Yani veritabanı sistemi, FAT32/NTFS/Extfs gibi parititon sistemlerinden bağımsız olarak kendi table ve indexlerini harddiskin bir partitionunu kendine özgü bir biçiminde formatlayarak orda depolayacak. Böyle bir teknoloji varmı ? Eğer yoksa veya bu denenmemiş bir teknoloji ise böyle bir proje başlatmak isterim. Proje hakkında birkaç şey düşündüm. Vereceğiniz cevap ve yorumlara göre detaylarını sizinle paylaşmak isterim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

o kısma erişecek program için işletim sitemini de veritabanını da yeniden yazmak gerekecek:(

bu arada antiparantez çok şatafatla sunulan windows longhorn un winfs diye yepyeni bir dosya sitemi ile geldiği.

fat12 / fat16 / fat32 / ntfs4 / ntfs5 / ext2 /ext3 /resizefs ve winfs ???
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Ben de hiç duymadım ancak Recep abinin dediklerine katılıyorum. Çok ciddi iş yükü getirecek ve çokta gerekli olmayan bir olay.

Ama ben öğrenmek adına biraz bu işleri kurcalamak istiyorum, vaktimde var diyorsanız neden olmasın.

Kolay gelsin.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Gelen yorumlardan anlıyorumki biraz işi detaylandırmak gerekiyor. İlk önce söylemek gerekirki, işletim sisteminin yeniden yazılmasına gerek yok. Partition silme/düzenleme gibi işlemler windows apileriyle yapılabiliyor.(bunun için hazır apiler yok tabi. Harddiskten veri yazma/silme fonksiyonlarını kullanmak gerekir) Bunu internetten araştırdım. Birkaç projeyi inceledim. Ayrıca inanmassanız, bu konuda partition magic diye çok ünlü bir programı örnek gösterebilirim :)

Ama yeni bir veritabanı motoru yapılması gerekir. Zaten ben proje derkende kastettiğimde buydu...

Ayrıca Böyle bişeyin gerek olmadığını söylemişsiniz. Hemen ilk bakışta aklınıza yatmaması normal birşey ama biraz kafa yorunca mantıklı geliyor. Biraz ön çalışma yaptım. Yazının devamını okuyun lütfen.

Özgün bir database partitionun avantajları :

*Hız
Klasik dosyalama sisteminde veriye ulaşma şöyle olur. (Korumalı modda)

Kullanıcı --> Veritabanı motoru --> api --> partition table(keyin CHS(cylinder,head,sector) adresi öğrenilir) ---> key --> partition table (Verinin keyden alınan chs olmayan adresinin chs si alınır) --> veri (table içinden)

Özgün bir db partitionda :

Kullanıcı --> Veritabanı motoru --> api --> Partition table 'ın içinde verinin direk chs adresini gösteren keyler--> veri (Paritionun veri alanındaki tabledan )

Yukarda yazdıklarımdan anlayacağınız gibi VT parititonda dosya diye bir kavram yok. Sadece veri var. Ve bu veriyi gösteren keyler direk dosya nın CHS adresini gösteriyor ve bu sayede klasik dosyalama sisteminin veriye ulaşımdaki işlem fazlalığı kısalmış oluyor. Buda hızı olumlu bir şekilde etkiler.
Ayrıca minimum fragmantasyon sağladığı için performansta artış olur. ( Detay için yazının devamını okuyun)

* Güvenlik
Veriler ayrı bir partitionda olduğu için ve dosya mantığıyla bilgiler muhafaza edilmediği için verilerin dokunulmazlıkları daha fazladır. ( Tabi paritionlarla uğraşan psikopat backdoor ve trojanlar yazılmazsa. Zaten kesin güvenlik diye birşeyden bahsedilemez)

* Çok platformda çalışma
Bugün en iddialı işletim sistemleri bile birbirlerinin partition sistemlerini tam anlamıyla tanımıyor. Şimdi kafanızdan " hayır hatan var Linux hepsini tanıyo" diye birşey geçtiğini duyuyorum. Ama öyle değil. Şu an linuxun bile NTFS desteği tam sağlıklı bir şekilde çalışmıyor. Sourceforge.com da hala geliştirme aşamasında. Şu an makinanızda NT veya Xp kurmuşsanız primary paritionunuz NTFS dir. Ve VT dosyalarınız orda kuruluysa ve VT motorunuzun linux sürümüyle oraya ulaşmaya çalışıyorsanız hiç ulaşamayacaksınız veya ek programları kullanıp ulaşacaksınız ama tam randıman elde edemiyeceksiniz. Bu sadece bir örnek. İlerde Micro(p)soft un abudik gubidik bölümleme sistemleri çıkarıcağı söyleniyo. O zaman işler dahada fazla karışabilir. Böyle bir karışıklılığa meydan vermemek için, çok platformda çalışacak bir veritabanı motorunun, verileri mümkün olduğunca paltformadan bağımsız bir şekilde tutması gerekir. Bu da özgün bir partition sistemiyle mümkün olabilir...

* Minimum Fragmantasyon
Klasik dosyalama sistemlerinde dosya silme/yazma/yeniden boyutlanma gibi işlemler zaman geçtikçe dosyaların sabit disk yüzeyinden parçalanmasına yol açar. Bunun adı fragmantation dır. Bunun terside defragmantationdır. Hatta windowsun defrag isimle programını hepimiz biliriz. Fragramtasyon oluşan bir bölümde dosyaların sahip olduğu veriler "fiziksel" olarak ardışık dizilmezler, dağınıktırlar.Tabi "mantıksal" olarak windows size verileri ardışık olarak sunar ama performansta düşme olur.
Özgün VT partitionunda böyle bir sorun minimuma indirilir. Çünkü verilerimiz harddiskte diğer dosyalarla harman olmaz. Şunuda unutmamak gerekirki fragmantasyon olmamasıda pek olası değildir. Çünkü verilerde sürekli şekilde yazılır/silinirler.
--------------------------------------------

Yukarda yazdıklarım sadece teorik şeylerdir. Hepsinin doğrulu sorgulanabilir. Forumdaki bilgili arkadaş ve abilerin bilgilerini paylaşmak niyetindeyim. Recep abiye ve Mustafa beye ilgilendikleri için teşekkür ediyorum. Fahrettin beyinde görüşlerini öğrenmek isterim. Zaman ayrıdığınız için Allah sizden razı olsun...
(Bir forum için uzun bir yazı oldu kusra bakmayın)
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Öncelikle detaylı araştırmaların için tebrik ederim. Her ne kadar hepsini okumasam da (çünkü Sn.Süleyman Demirel de çok hızlı okurmuş, yazının başından ve sonundan bir iki cümle ile ne demek istediğini anlamak gayet kolay :) ) anlaşılan o ki; sen bu yola baş koydun :D

Diskte istediğin track sektöre konumlanırken işletim sisteminin tanıdığı kısmın dışına çıkabilecek mısın? Yoksa partition magic i ben kullanıyorum ve çok da beğeniyorum. Ama onun yaptığı sadece Partition Table i değiştirmek, ve gerekli değişiklikleri yaptıktan sonra da tanımlanan kısmı formatlamak vs. Dikkate etmek lazım ki; önce ulaşılabilen PT yi uygun şekilde düzenledikten sonra o bölgeye/kesime ulaşılabiliyor. Ama yine de hevesini kırmak istemem. Sadece bildiklerimi yazdım. Belki başka low-level işlemlerle ulaşmak mümkündür. Ama başta dediğimin arkasındayım; o iş için oluşturacağın fonksiyon ve procedurler senin için yeni bir işletim sistemi demektir. Yani mevcut işletim sistemi o bölgeye ulaşamıyacaktır! diye düşünüyorum :?:
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Estağfirullah, arada insan daldi mi uzun yazdığını birince farkedebiliyor. Benim de başıma geliyor :)

Düşüncelerinizi ve bu konudaki hevesinizi takdir ediyorum. Bu heves, size, bize, ülkemize er ya da geç birşeyler katacaklar...

Veritabanı projesi konusuna gelince:
Amatör olarak 16 yıldır, profesyonel olarak da 9 yıldır yazılı geliştirmekteyim. Bu süre içinde konu ile ilgili edindiğim ve aktarabileceğim önemli bir tecrübe şu ki: Birilerinin yaptığı hiç bir sistem dışardan göründüğü kadar kolay olmuyor. Tabi bunu kendime de hala söylüyorum. Yani daha geçen sene Almanya'daki bir projede Alman bir firmanın yıllardır çalışan uygulamasını çok kısıtlı bir dönemde değiştirmek zorunda kladık. Ben aslında biraz önce aktardığım sebepten dolayı taraftar değildim. Zira dışardan kaba hesaplar yapınca ya aslında bu işi çok kolay kıvırırız dememize rağmen göremediğimiz çok şeyin olduğunu tahmin ediyor ve girmek istemiyordum. Ama şartlar öyle gelişti biraz da gaz verdiler. Biz de tab icanım biz yaparız gösterelim Türkün gücünü Almanlara derken daldık işe.. Şubat'ta başladığımış iş Allah'a çok şükür kü temel işleviniz gerekil olduğu bahar ve yaz dönemi içinde yerine getirdi ve alnımız ak bir şekilde çıktık gibi ama... işten hala kurtulamadık. Uygulamanın kemale ermesine daha çok zaman var....

Neyse aslında çok yakın bir örnek olmadı belki yazmaya başlayıca dalıp gidiyoruz işte...

Bir veritabanı moturu geliştirmek kolay iş değil... Bunu mutlaka siz de biliyorsunuz.... Partition konusu ile bulduğunuz güzel fikri bir veritabanı moturunda avasntaja dönüştürme fikri de güzel fakat ticari değil. Benim samimi olarak tanıdığım farklı iki kişi farklı zamanlarda bu işe girdiler. Veritabanı motoru geliştirmeye kalkıştılar. ITU Bilgisayar mühndisliğinden mezun tekbnik olarak iyi olan arkadaşımın işi caha aşlangıç aşamalarında kaldı. Bir başka arkadaşım var ki onun projesi başarılı sayılabilir. Benim bildiğim 5 yı veya daha uzun bir süredir Kıbrıs'ta galiba Doğu Akdeniz Üniversitesi çevresinde oradaki bir profesör bizim arkadaş ve yine belli bir çekirdek ekibe ilaveten üniversite öğrencilerinden de değişken bir ekip ile hem coppact, hızlı bir veritabanı hem de buna paralel bir uygulama geliştirme aracı geliştiriyorlar. Vu bunları sattılar da... Hem veritabanı hem de diğer araçlar pocket PC üzerinde de aynen çalışabilyor. Demolarda oldukça hızl çaışıyor ve Almanya'da sattıkları uygulamalar da var...

Fakat buna rağmen yazdıkları veritabanı daha yeni yeni SQL desteği kazandı. trigger ve stored procedure desteği yok. standart SQL dışında bu gun Oracle ve Sybvase gibi veritabanlarının sundukları kompleks imkanlara sahip olmak için gerçekten kırk fırın ekmeğe ihtiyaçları var. Gündee geldiğinde biz bile onların geliştirdikleri bu veritabanını kullanma konusunda karar veremedik. İnşallah ileri de bizi de tatmin eder ve kullanırız.

Özetle diyeceğim şu ki:
bulunan güzel fikirleri merkezinde kendimizin olacağı projelerde amerikayı yendiden keşifte bize avantaj sağlamakta kullanmak yerine kurulu sistemlerin kenarında bile kullanmak daha uygun olur. Şundan dolayı: Eğer bilsem ki 3 yıl sonra yerli üretim ve benim ihtiyaçlarıma karşılık verebilecek bir veritabanı ile bu foruma ilan atacaksınız. o zaman elimden gelen her desteği verirdim. Ama malesef öyle inanıyorum ki: bu pek mükün olamayacak kısıtlı imkanlar er ya da geç engel teşkil edecek ve hem bulunan güzel fikirler inançlar kaybolduğu için yarıyolda kalıp kaybolacak hem verilen emeklere yazık olacak. O yüzdenisterseniz sizi bahsettiğim arkadaşlar ile tanıştırayım fikir alışverişinde bulunun fikrinizi onlarla paylaşın eğer arkadaşlar fikri beğenir ve değerlendirmeye karar verirseler eminim ki yıllardır belirli bir noktaya gelen arkadaşların projesinde uygulama şansı bulunursa bu fikir o zaman hem sizi tatmin edecek bir boyutta işe yarayabilir hem de ticari değer bulur.

Bu yazıdan sonra buna inanır mısınız bilmiyorum ama amacım hevesinizi kırmak değil doğru yere kanalize ederek hevesinizden toplum oalrak istifade edebilmek. Çünkü benzer heveslerle yola çıkıp yarıyolda kalan o kadar çok proje var ki:
Bu kadar olumsuzluktan sonra olumlu bir örnek:
Vakti zamanında Mirosoft grafik arabirimli işletim sistemi geliştirmeye başladığında ve Windowsu icat ettiği yıllara paralel Digital'den ayrılan idealist bir ekip grafik arabirimli Enterprise bir işletim sistemi geliştirmek amacıyla biraraya geldiler. Oldukça güzel çalışmalar yaparak ilgili çevrelerin dikkatini de çekmeyi başardılar ve tabi Amerika'da bile bu tür her ekibin başına geldiği gibi maddi sıkıntıya düştüler (Bakınız diğer örnek: Amiga'yi geliştiren ekibin düştüğü sıkıntıda Commodore'un Amiga'yi satın alması.) Bu durumu gören ticari deha Bill Gates bu ekibi ve ürününü bünyesine katarak Windows'a paralel olarak onların ürününü de Windows NT adı altında piyasaya çıkarttı. Gel zaman git zaman Windows 3.1, 95, 98 çıktı paraleleinde de NT devam edip benim hatırladığım 3.5 ve 4'ü çıktı. Sene 99 NT 5 hala üzerinde çalışılıyor. Bill Gates doğma büyüme Microsoftlu olan Windows'un aslında sakat doğduğunu ve 95, 98 değil 300'e kadar gitse de adam olmayacağını anladı. Buna karşılık NT4'ün Win987 karşısında mükemmel duruduğunu farketti. N5'in adını Windows 2000 yaptı (sanki Winn 982,in devami gibi) arayüzüünde özellikle denetim masasında gerekli düzenlemelei yaptı bu şekilde piyasaya çıkardı. Windows 98'i de son bi veda sürtümü olarak ME adı altında çıkartıp çöpe attı. :) Azimli ekibin başarısı....

Bu sırada unuttuğum ufak birşey eğer bir ekip değilseniz yani tek kişi olarak buları düşünüyoranız hemen başka hiç birşeye gerek olmadan bu işlerin ekip işi olduğunu hatta öyle 2-3 kişinin bile az sayılabileceği ekip işleri olduğunu hatırlatayım.

Hay Allah, bu kadar yazıyı kim okur bilmiyorum ama oldu bi kere yazmış bulunduk.. Vaktini aldıklarım hakkını helal etsin...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

helal olsun abi
uzun olmus biraz ama :) ben okudum
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

evet ben de okudum, olaya çok iyi yaklaşmışsın abi.

Bence de eğer arkadaş kabul ederse mevcut ekibe katılma olayı güzel bir fikir.

kolay gelsin.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Fahrettin abiye ve diğer arkadaşlara bana zaman ayırdığı için ve tecrübelerini paylaştığı için çok teşekkür ediyorum. Ayrıca Recep abiye malesef yine yanıldığını söylemeliyim :) Harddiskin bölümlenmemiş/desteklenmeyen alanlarınada apilerle ulaşabilir. Hatta inanmassanız size bir proje yi örnek gösterebilirim. :) Adı explore2fs. Bu program sayesinde windowsdan linuxun partition sistemi olan extfs2/3 e ulaşabilirsiniz. Üstelik delphide yapılmış. İlgilenenler için adresi http://uranus.it.swin.edu.au/~jn/linux/explore2fs.htm (ayrıca bu programda ufak bir düzeltmede bulundum ama yapan kişiden cevap gelmedi)

Neyse asıl konuya dönelim. Yazınızda değindiğiniz gibi veritabanı motoru yapmak çok zor bir iş ve bende bunun böyle olduğunu kabul ediyorum. Bunun böyle olduğunu bu işi düşünmeye başlarken anlamıştım zaten. Yalnız aklımda şöyle çözümler geçti. Biliyorsunuzki veritabanları ana hatlarıyla iki katmandırlar. Mantıksal ve Fiziksel. Benim keşfettiğim fikir bu işin "fizksel" yönüne hitap ediyor. Yani veriyi depolama yönüne. Bu yönüyle amerikayı değil başka bir kıta ilk kez keşfedilmiş olucak. Çünkü bu kıta daha önce hiç keşfedilmemiş. Ama işin "mantıksal" yönünü ele alırsak size hak vermemek mümkün değil. Bir çok angarya iş bir çok insan emeği gerekli. Ama bu işi ilk düşündüğüm zaman bahsettiğiniz arkadaşınızın yaptığı proje gibi birşeyden haberim yoktu. Ben bu işi çözmek için mysql / postregsql / flashfiler / firebird gibi açık kaynaklı veritabanlarının incelenerek çözülebileceğini bir alternatif olarak görüyordum. Ama sizin önerdiğiniz projeyi yapan arkadaşlarınızın neler yaptıklarını görmek isterim. Demolarını incelemek, proje dökümanlarını okumak gibi. Mevcut bir projeye dahil olmak benide mutlu eder. Yaptıkları projenin web adresi varsa linkini sizden rica ediyorum. Projenin mantıksal katmanı fiziksel katmanı monte etmek için inşallah uygundur.
Daha fazla yorum bekliyorum

Allah yardımcımız olsun...

(Burda herkese ismiyle hitap edildiğine göre, bende ismimi vereyim. İsmim Ahmet memnun oldum :) )
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Interbase gibi açık kodlu bir veritabanı üzerinde fikirlerinizi uygulamak da başlı başına güzel bir fikir aslında.

Ben bahsettiğim arkadaş ile görüşerek gerekli bilgileri alıp size aktarmaya çalışacağım...

Kolay gelsin....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

O olayı ben de biliyorum, hatta linux tan diğer fat ve ntfs e ulaşılabildiği gibi tersine bir işlem de yapılabiliyor. Ama bunlara ulaşıp da bilgi okuma ve yazmak dediğim gibi ayrı bir işletim sistemidir. Yada bahsettiğin program gibi bir ara katman yazman gerekecek. İnşallah başarılı olursun.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Sağolasın Recep abi. Fahrettin beyden de Allah razı olsun. Benim için uğraşıyor. Birkaç takıldığım nokta var. Transaction olayı kafamı kurcalıyor. Transaction hakkında teorik bilgim var sadece. Transaction kullanan bir uygulamayı hiç incelemedim. Bir kaç sorum olucak

Transaction fiziksel katmandan ne ister ?
Ne kadar yer ister ?
Ne kadarı uygulama programına ve ne kadarı Vt motoruna bağlıdır ?
Mevcut transaction teknolojileri ve teknikleri ?

Bu sorulara cevap verebilecek döküman/kitap arıyorum. Çünkü buna uygun bir fiziksel katman tasarımı yapılmazsa mantıksal katmanda problem çıkabilir. Benim düşüncem transactiona linuxun takas alanı gibi bir parititon daha açmak. Siz ne düşünüyorsunuz ?
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Veritabanı üzerine Oracle'ın kitapları üstüne tanımam. Bir ara Oracle lisansı aldığınız zaman 30-40 tane beyaz kitap veriyorlardı. Herşeyi detaylıca anlatıyordu. Şimdi sadece isteyene parayla veriyorlar galiba.

Yakınınızda böyle birisi varsa bu kitaplardan okuyabilirsiniz, değilse google.com'da arama yaptırın.

Kolay gelsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

transaction kabaca; yapılan işlemlerin (insert / update / delete gibi) fiziksel veritabanı üzerinde değil de cache de yapılmasıdır. işlemlerin herhangi birinde bir tutarsızlık veya kırılma olursa veritabanı bundan herhangi bir şekilde etkilenmez. çünkü transaction un bitirilmesi yani yapılan işlemin kalıcı olarak diske yazılması (commit) tamamen kullanıcının insiyatifindedir. kullanıcı da istediği yerden işlemi kesip transaction un başına dönebilir (rollback).
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Teşekkür ederim.
Düşündüğüm gibi fiziksel olarak sadece cache alanı istiyor. Benim için zaten bu önemliydi. Ama tabi kafama transactionun mantıksal düzeyiyle ilgili sorular takıldı. :)

Transactionın karışıklılığa yol açmazmı ?
Mesela commit olmamış bir stok çıkışı depodaki malların fazla gösterilmesine sebep olmazmı ?
Yoksa mantıksal düzeyde mal çıkışı olduğu varsayılırmı ?
Varsayılsa bile rollback yapıldımı yine karışıklık çıkmazmı ?
Ayrıca bu işin ne kadarı client'a ne kadarı server'a düşer ?
Hangi sıklıkta commit yapılması lazım ?
Sıklık süresini belirleyen kriterler nedir ?
Bu sorunlarla karşılaştıysanız nasıl çözüm yolları geliştirdiniz ?

vs. vs...

Hepsine cevap vermeye uğraşmayın sakın. Size karşı mahçup duruma düşüyorum :wink: Ama genel bir yaklaşımla soruları yanıtlarsanız sevinirim.( Yani Recep abinin bahsettiği gibi sorulara Süleyman Demirel'in okuma taktikleriyle yaklaşabilirsiniz :D )
Piyasada, transanction konusunu detaylandırmış SQL isimli bayağ hacimli bir kitap gördüm. Almayı düşünüyorum.
Kolay gelsin...
Cevapla