Mesaj sistemi için Sqlite3 uygun mudur?

Merhaba,

Anonim mesajlaşma sistemi yapıyorum. Bir nevi chat ile sohbet. Fakat aklıma şöyle bir şey geldi. Şimdi tamam, ben bu verileri Sqlite3’e kaydediyorum. Fakat ben bu kullanıcı adı ve şifreleri de Sqlite3’e kaydedeceğim. E haliyle, başka bilgisayarlarda bu chat programını kullananlara, bu Sqlite3 dosyasının inmesi gerek.

E kişi DB Browser üzerinden o dosyayı okutunca tüm veriler ortaya çıkacak.

Yanlışım varsa düzeltirseniz sevinirim. Doğru düşünmüyor muyum?

1 Beğeni

Bu muhabbeti burda konuşmuştuk.

Kullanıcıya boş kodları göndericeksin. Yani WhatsApp ı indirdiğinde ki gibi bom boş açılcak kayıt olcak falan filan. Sqlite3 ile kullanıcı bilgilerini niye gönderiyon dostum?

Bir program her zaman yanında bir veritabanı taşımak zorunda değil. Mesajlaşma uygulamalarında bu tarz bir yaklaşım hiç doğru değil. Veritabanı bir sunucu arkasında tutulup istemcilerin isteğine göre bu veritabanından uygun olan veriler istemciye aktarılır. Burada istemci veritabanına sahip olmak zorunda değil hatta olmamalı.

1 Beğeni

Peki dediğiniz sistem Sqlite3 ile yapılabilir mi? Pek yapılacağını sanmıyorum ama…

Bilmediğimden soracağım. Whatsapp yanında taşımıyor mu? Hatta bizden yedeklemek isteyip istemediğimizi soruyor. Bunun yüzünden Whatsapp’te mesajları silme kısmı yok mu? Mesajlar bizim telefonlarımızda kaydediliyor hem sunucuda alan kaplamıyor. Bunun sayesinde Cloud üzerindeki sunucudaki veritabanının maliyeti yerine Process maliyetini yükselterek daha iyi bir sistem oluşturmaz mıyız?

Hocam evet öyle, dediğiniz gibi. Fakat ben kullanıcı adı + şifre sistemi ile yapacağım. WhatsApp bir telefona indiğinde sadece bir numara ile yapılabiliyor. Yani giriş yapmasına gerek olmuyor.

Aklıma şimdi geldi, bende kurulumda böyle bir şey yapabilirim aslında. Ama yine de tüm veritabanından bilgi çekmem gerek. Haliyle DB programı ile sorgulamayla, tüm bilgiler bulunabilir ve açık keşfedilebilir. Yine de güvenli bir yöntem değil.

Şimdi düşündüğümüzde Anonim bir mesajlaşma uygulaması yapıcaz. Ben yapsaydım nasıl yapardım. Zaten anonim olacakya konuşma süresi eklerdim.

Mesela 2 kişi var Ahmet ve Mehmet.

Bu ikisi uygulamaya kendi hesaplarından girecekler. Ahmet, Mehmet’le konuşmak istiyor. Mehmet’e sinyal gönderecek. Sinyalde işte kaç saat konuşmak istiyorsun falan olacak. 1 saat ayarladık diyelim. O konuşma 1 saat boyunca devam edecek. Girilen mesajları görebilecekler. Daha sonra 1 saat bitince bütün hepsi silinsin.

Anonim mantığı bende böyle çalışıyor. Hem verilerinin sonradan sızması konusunda güvenli bir yöntem hem de kullanıcı adıyla giriş yapılacağı için herhangi bir telefon numarası falan alınmayacak. E posta hesabı falan almayacak. Eğer kişi 1 hafta falan aktiflik göstermezse hesabı silinecek.
Chat room’lar olabilir mesela şirketler için. 1 aylık bir proje için açılacak 1 ay boyunca veri aktarımı gerçekleşecek bir kaç kişi konuşacak grup halinde. Sonra silinecek. Hem şirketin projeyle ilgili verilerinin çalınma ihtimali en düşüğe çekilecek hem istenilen zaman diliminde şirketin ihtiyaçlarını karşılamış olacak.

Not: Dediğim sistem ile Bölge mantığında veri tabanı açabilirsin. işte A1_DB A2_DB Bunlar içinde bulunan verileri ölçen bir kısım yazardım. A1_DB’de A2_DB’den daha fazla veri varsa A2_DB kaydederdim konuşmaları.

Hocam dediğiniz yöntem mükemmel, elinize sağlık. Benim aklımda şöyle bir şey var;

Kullanıcı bir hesap oluşturacak. Bu hesabın kullanıcı adı ve şifre bilgileri veri tabanında kayıt edilecek. Giriş yaparken, Veri tabanından sorgulanacak. Eğer if işleminden geçerse genel menüye geçecek ve oradan mesaj gönderme gibi seçeneklere girebilecek.

Fakat şöyle bir şey var, tamam eyvallah, birisine mesaj gönderirken kullanıcı adını yazacağız, o kullanıcı adı veri tabanında sorgulanacak. Haliyle tüm verilerin kullanacak kişinin bilgisayarında olması gerek.

Yani bir başka kullanıcı adına mesaj yollamak için, tüm verilerin kişinin bilgisayarında olması gerek. Bunu nasıl çözebilirim?

Diyorsun ki ben birisiyle konuştum önceden ve ben bu adamla önceden konuştuğum için benim karşıma çıkması uygulamada? Doğru anladım mı?

Eğer durum buysa sunucuda veritabanın var. Benim kullanıcı adımı kaydediyor.
Başka bir table aç mesela. Benim Kullanıcı adım yazsın adamın kullanıcı adı yazsın. Sonra Bu iki adı şifrele artık Sezar şifrelememi. Char’koda dökmemi bir işlemden geçir. Bu bulduğun yeni adla bir table aç sohbet mesajları orada toplansın. Birisiyle konuşma yeri çıkacağı vakit ikisinin ismini al birleştir o tabloya git.

Anonim bir uygulama yapmak istediğin için ne kadar ilerleyebilirsin bilmiyorum ama aklıma bu geldi. Mantıklı değil bana göre ama bu geldi aklıma yani. Daha iyi bir şey gelirse yazarım.

Depolama için MongoDB ya da MySQL kullanmanı tavsiye ederim. NodeJS backend bir uygulama geliştiriyorsan MongoDB kullan. Verim oranı daha fazla. Başka bir tane kullanacaksan MySQL ya da başka bir RDMS kullan

PostgreSQL/CockroachDB belki biraz daha verimliliği az oluyor diye biliyorum yalan olmasın.

Hocam şimdi şöyle, sanırım yanlış anladınız. Şimdi kayıtlı olan kullanıcılar birbirleriyle sohbet edecekler. Fakat kullanıcı adının sorgusu için, bilgiler veri tabanında. Bu veri tabanı ise kullanacak kişilerin bilgisayarına inmesi gerekli. Mesela şu bilgiler, tüm kullananların bilgisayarında olmalı;

kullaniciadi      sifre                     mesajlar

angarali          angarali51                  {}
sipid             jeymisbond50                {}
istanbullu        istanbullu20                {}
hasan23           Hasanali55                  {}

Mesela hasan23, sipid'e mesaj gönderecek. Ama ondan önce, sipid'in veri tabanında olup olmadığını sorgulayacak. Buradaki sorun, kullanacak kişi eğer Program ile dosyayı aç yaparak veri tabanını okursa, şifreler gözükür. Sorun bu.

1 Beğeni

Sağ olun, peki bu Sqlite dosyası, başka bilgisayarlara geçtiğinde okunurluğu kapanıyor mu? Yani program ile kapanması engelleniyor mu? Bilginiz var mı bu konuda? Hiç aklıma gelmedi.

1 Beğeni

Şifreler neden gözüküyor. Şifreleri sunucuda saklaman lazım.

kullaniciadi      sifre    

angarali          angarali51
sipid             jeymisbond50 
istanbullu        istanbullu20 
hasan23           Hasanali55 

Bu senin ana veritabanın sunucuda bulunan olmalı

kullaniciadi      mesajlar

angarali          {}
sipid             {}
istanbullu        {}
hasan23           {}

Bu da telefondaki olmalı.

Dediğiniz şeyi anlamadım.

Sanırım şunu demeye çalışıyorsunuz;

Kullanıcı bilgilerini herhangi MongoDB gibi veri tabanında tut, mesajları ise Sqlite ile tut. Doğru muyum? Kişi mesaj göndermek istediğinde, MongoDB ile sorgularım. Eğer kullanıcı MongoDB’de varsa işlemi onaylar vs vs. Fakat bunda da sorun şu, Gönderilen mesajı nasıl karşı kullanıcının bilgisayarındaki Sqlite dosyasına aktaracağım? Kusura bakmayın biraz acemice sorular sorduysam.

1 Beğeni

Kafana göre nasıl yapmak isterse.

Whatsapp gibi uygulamalarda arka planda çalışma özelliği vardır. Bu özelliğin görevi sunucu ile bağlantı kurup aktarılması gereken bir mesaj var mı ya da yok mu ona bakmaktadır.
Adam ayarlıyor işte 2 saniyede bir sunucuya request gönder bana mesaj gelmiş mi? Sunucuda mesaj duruyor mesaj varsa eğer alıp işliyor insert ile sunucudan. Yoksa eğer döngüye devam.

Arka planda çalışmıyorsa eğer uygulama, uygulamaya giriş yapıldığı vakit request gönderilir sunucuda bulunan mesajlar alınır ve yazılır. Bu durumu zaten çoğumuz yaşıyoruz bir anda okul gruplarından 800 mesaj gelince telefon kafayı yiyor ya :D, bunun yüzünden yiyor.

Problem yok :innocent:

Güzel bir yöntem hocam. Peki şimdi şöyle. Ben bu programı bir başkasının bilgisayarına kurdurduğumda bu dosya gelecek.
Ekran Alıntısı
Bu dosyada, tüm kullanıcıların kullanıcı adları, şifreleri ve mesajları bulunuyor. Fakat başka bir bilgisayarda bu dosya, program ile açılabilir. Şimdi tek sorun bu. Aklımda sistem az çok tamam.

Kişi mesaj gönderirken kullanıcı adı girecek, eğer kullanıcı adı varsa, kişiye giden mesaj arraylist şeklinde kayıt edilecek.

Şimdi tek sorun, bu dosyanın program ile açılıp açılamayacağı. Sizce içindeki verilere erişilebilir mi? Eğer erişilmezse, direktmen yapabilirim dediğim sistemi. Dosya açılmazsa zaten veri çalma gibi bir durum olamaz.

Fakat bu sisteminde sorunu var. Mesela yeni bir kullanıcı kayıt olduğunda, yeni kişinin bilgileri, eskiden yüklenmiş bilgisayarlara gitmez.

1 Beğeni

Hepsine erişebilirim. Engellemenin bir yolu yok. Cloud, sunucu tabanlı engellersin ama adamın telefonunda varsa engelleyemezsin.

O zaman Sqlite’dan vazgeçeyim yani?

1 Beğeni

Hangi veritabanı olursa olsun engelleyemezsin. Çünkü senin bir bilgi yerin bulunuyor ve sen bunu kullanıcının telefonuna yüklüyorsun. Hiçbir veritabanı kurtaramaz her türlü erişim. Kullanıcı bilgileri her zaman kendi sunucunda saklamalısın.