Forum: Projeler Rhodeus Script RSS
Veritabanı Eklentisi
Geçici dosya/değişken yöneticisi
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1881 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Veritabanı Eklentisi
Merhaba,

Bilemiyorum; belki de eklentiden öte, aslında düşünmeye çalıştıklarım başka bir şey: Sizce dil içerisine yedirilmiş bir veritabanı (database) ve oturum (session) yöneticisi/sınıfı/arabirimi yapabilir miyiz?

Malumunuz D'de her türlü veritabanın ilintileri mevcut. Her olanağı olmasa da basit bir şekilde veritabanını kurup istemci tarafına sunmamız mümkün olabilir gibi. Ama sesli düşünelim biraz, ne dersiniz?

Önerileri bekliyorum...

Şöyle ki: İstemci bir geçerlilik süresi (timeout) içerisinde zaten bir şekilde kurulmuş (veritabanına bağlanmış) içeriğe erişebilmeli. Dolayısıyla önce "oturum yöneticisi" kısmı sanki önplana çıkıyor. Öyle değil mi; çünkü istemci her veri talep ettiğinde kodlar içine veritabanı bağlantı bilgilerini/şifrelerini de gömmeniz gerekir. Oysa, atıyorum ana sayfaya girildiği andan itibaren ve/veya giriş ekranında (login form) veritabanı ile bağlantı kurulsa belli bir geçerlilik süresi boyunca bunu koruması daha doğrudur. Zaten de öyle yapılıyor olmalı?

Son olarak bütün bunların olabilmesi için taaa en başta, 'script engine'nin kullandığı geçici dosya yöneticisini tasarlamalıyız. Öyle ya, her seferinde çalıştırılan uygulamamız geçerlilik süresi içinde kalan verileri kullanacak/kullanmalı ve dolanları silecek/silmeli.

İşte belki bu sayede tüm web sayfaları arasında geçerliliğini koruyan 'globak variable' yapmak mümkün...:)

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1881 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Biraz düşündüm; oturum (session) yöneticisi, başlı başına bir veritabanı yöneticisi gibi...:)

Öyle ki, geçici dosyaların düzenli bakım yapılabilmesi için parameter/logs verilerinin bir dosyada tutulması gerekiyormuş. Zaten oturum kimliği (sId) istemci tarafından ve sayfalar arası geçiş yapılıyorken ya HTML içine, ya da 'post method'u olarak geçirilecek. Eğer bu kimliğin süresi dolmadıysa ve karşılığı sunucuda bulunuyorsa (hacking, injection) istemciye veri gönderilir.

Buraya kadar sorun yok, her şey net...

Amaaa, RhS bir yorumlayıcı olduğuna göre; istemci her defa veri talep ettiğinde, belli kurallar (güvenlik önlemleri) çerçevesinde veri tabanı ile yeniden bağlantı kurulacak. Veritabanlarının bu tür işlemlere (reconnection) verdiği tepkileri (performance) bilemiyorum ama Adobe Flash'ın depolama alanını kullanma becerisine göre yavaş kalacağını zannediyorum.

Düşünsenize!

Binlerce istemci bir web sitesine giriyor, kimi ziyaretten kısa bir süre sonra ayrılırken kimi (örneğin bir e-ticaret sitesi alışveriş yapmaya) devam ediyor. Her ne kadar tarayıcı (browser) kapatılmasa bile, oturum süresi boyunca veritabanına defalarca bağlanma gerçekleşebilir. Vuuuuvv....:)

Peki, hiç veritabanı ile uğraşmasak ve zaten hali hazırda çağrılması gerekecek std.file sınıfı (OS File Systems) ve JSON yapısı bize, anahtar teslim (tüm ihtiyaç duyulan çözümleri ile) veritabanı sunucusu veremez mi?

Neler olabilir:

  • 1. sId, istemciye atandığında tarih/saat bilgisi ile bir MD5 (veya başka bir algoritmanın) kodu oluşturulur...
  • 2. Bu kod ile aynı ismi taşıyan verilerin yazılacağı dizin meydana getirilir,
  • 3. Tam o sırada gerekiyorsa (maintenanceTime < realTime ise) bakım yapılır:
    • Eğer bakım zamanı (maxTimeOut*latencyTime + lastSessionTime) geldiyse ve başka bakım yapan (maintenanceLock) yoksa geçmişteki dosyalar artık kesinlikle çöp dosyalardır. Bu sırada başka istemci temizlik yapma ihtimaline karşı maintenanceLock çok önemlidir!
    • İşte burada başka bir alt başlık çıkıyor; o da yorumlayıcı için bazı sabit ve değişkenlerin tutulduğu 'configuration file'. Aslında günlük tutma (log file) da gerekebilir. Örneğin yorumluyucu kaç defa doğru bir şekilde çalıştırıldı veya bunların kaçı hata iletisi gönderdi gibi. Öyleyse, bir taşla bir kaç kuş vurarak pekala geçici değişkenleri yine aynı sistem ile (JSON) ama geçerlilik süresi sonsuz olacak şekilde tutabiliriz.
  • 4. İstemcinin talep ettiği veriler, web sitesinin ana veritabanından süzülür:
    • Bu veriler, gezilen sayfanın (pId) içeriği olabileceği gibi önceki bir sayfada kullanıcı dosyaları (örneğin doldurduğu bir form) da olabilir. Bu durumda, oturum kimliği (sId) ile oluşturulan dizin, aslında geçerlilik süresi (sTimeOut) boyunca ihtiyaç duyulabilecek tüm verilerin tutulduğu yerdir. Bence pId sayfası yeniden çağrıldığında büyük (hacimli olan) ana veritabanından tekrar veri talep edilmez. Zaten o daha önce sId ile oluşturulan dizin içindeki dosyalardadır. Bu dosyaların isimleri veritabanındaki düğümün veya çizelgenin (table) ismi olabilir.

Evettt, sanırım bir taşla 2, 3 hatta 4 kuş (caching) vurmuş oluyoruz...:)

  • 5. Süzülen veri vakit geçirilmeden (hazır hafızadayken) istemciye gönderilir ve bir kopyası kayıt edilir. Belki koşut işlem (parallel processing) yaparak aynı anda bu işlem yapılabilir.
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2013-03-19, 09:50.
Değişiklik nedeni: 5. madde eklendi...
Avatar
zekeriyadurmus #3
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Güzel düşünmüşsünüz Salih hocam. Hüseyin arkadaşımızın bir denemesi olmuştu bu veritabanı olayı için. Yapılabilir ama bazı soruları cevaplandırmak lazım

Hocam benim kafama şu takıldı. Farklı türden verileri nasıl bir arada tutacağız?
Birbirinden türetilmiş sınıflar?
RhS 2.0 için tasarım aşamasında olan veri yapısı?
Variant
Veya başka bir yapı


Oysa, atıyorum ana sayfaya girildiği andan itibaren ve/veya giriş ekranında (login form) veritabanı ile bağlantı kurulsa belli bir geçerlilik süresi boyunca bunu koruması daha doğrudur. Zaten de öyle yapılıyor olmalı?
Emin değilim ama bağlantının kapatılması gerekmiyor mu?


İşte belki bu sayede tüm web sayfaları arasında geçerliliğini koruyan 'global variable' yapmak mümkün...
SESSION yapısını modifiye edebiliriz belki?

Birde hocam siz reconnection deyince aklıma şu geldi. MySQL gibi sürekli açık duran bir veritabanı sunucu yapmak bu reconnection için daha uygun olmaz mı? Sonuçta şu an da her web sayfası isteğinde rhs-cgi.exe başlatılıyor. Yani veritabanı bağlantısı her web isteği için baştan kuruluyor.

Belki de harddisklerin dosyaları saklama yöntemini (sanırsam özel bir tablosu var) taklit edebiliriz veya aynen uygulayabiliriz. Verinin başlangıç ve bitiş yerlerini belirtiriz. Hatta doğrudan basit file.write fonksiyonlarının haricinde offset belirtip yazma işlemini biz yapabiliriz daha hızlı bir veritabanı elde edebiliriz.

5. Süzülen veri vakit geçirilmeden (hazır hafızadayken) istemciye gönderilir ve bir kopyası kayıt edilir. Belki koşut işlem (parallel processing) yaparak aynı anda bu işlem yapılabilir.
Baya yabancıyım bu konuya :) Ama ufakta olsa bir şeyler görsem sanırım anlayabilirim.

Zekeriya
Bilgi meraktan gelir...
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-05-27, 12:15:14 (UTC -07:00)