Android Database işleminde hangi yöntem?

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
beklentili
Üye
Mesajlar: 86
Kayıt: 21 Ara 2013 09:05
İletişim:

Android Database işleminde hangi yöntem?

Mesaj gönderen beklentili »

Merhaba, malumunuz özellikle mobil uygulamalarda hız konusu çok büyük öneme sahip. 95'lerde büyük bir sabır örneği göstererek kullandığımız bilgisayarlar bugün gelişti... gelişti... gelişti. Hal böyle olunca da insanlar artık bekleme konusunda biraz sabırsızlar. İşleri hemen olsun, uygulama hemen açılsın, sorgu sonucu hemen gelsin istiyorlar. Bu durumda ister istemez bizlere yansıyor.

Ben de Android uygulamasında veritabanı işlemlerinde hız problemi yaşıyorum. Şöyle ki; uygulama ana formu create etti esnada data connection işlemini başlatıyorum. Haliyle uygulama internet hızına bağlı olarak 10 saniye hatta internet hızı yavaş ise daha fazla süreyi conncetion işlemi için harcıyor. Bu dudumda siyah ekranın daha fazla ekranda kalmasına ve daha fazla sabırsızlığa neden oluyor. Bir de veritabanında sql sorgusu çalıştırınca işlem uzuyor... uzuyor...uzuyor.

Bağlantı detaylarım şöyle;
Veritabanı: Mysql
Bağlantı Türü: Web Sunucu (Webdeki veritabanım)

Kullanılan component;
UniConnection1
UniQuery1
MySQLUniProvider1

Bağlantı Yöntemi;
DataModule üzerine yerleştirdiğim UniConnection1 nesnesine bağlantı bilgilerini önceden giriyorum ve uygulama create aşamasında
DataModule2.UniConnection1.Connected:=True;
DataModule2.UniQuery1.Active:=True;

komutları ile bağlantıyı sağlıyorum.

Verileri Çekme;
Stanadar SQL komutlarını kullanıyorum.

Bu hususla ilgili sorum tam olarak şudur;
1- Mevcut yöntemde varsa eksiklikler gidersem hız problemi çözülür mü?
2- Mevcut yöntemle uygulama her açıldığında arka planda (Unidac componenti aracılığıyla) verileri çekip SQLite kaydetsem veri alışverilini SQLite üzerinden yapsam hız konusuna çözüm olur mu?
3- Mustafa Hocanın http://www.mustafasoy.com.tr/firemonkey ... l#more-407 bu yazısındaki yöntemi uygulasam hız problemini çözebilir miyim? (web servis ile mssql bağlantısı)

Tabi ki hız derken jet hızında bir bağlantı hızını kastetmiyorum ama mevcut yöntemdeki hız da uygulamanın değerini düşürüyor.

Acaba bu konuda bilgi sahibi olan ve bir öneride bulunabilecek birileri var mıdır?

Saygılarımla.
[/size]http://www.componentler.com | Türkçe component sitesi
Kullanıcı avatarı
egeven
Üye
Mesajlar: 12
Kayıt: 03 Ara 2014 12:56

Re: Android Database işleminde hangi yöntem?

Mesaj gönderen egeven »

Merhaba,

Bu konunun açılması ve fikirlerin paylaşılması çok yararlı olacaktır, mobilden veritabanı işlemlerinin sorunsuz ve hızlı yapılması gerçekten zor bir iş henüz sağlıklı bir yol bilmiyorum fakat kendimce bir kaç bi şey ekleyebilirim.

Aynı componentleri ve aynı bağlantı yolunu kullanıyorum, sunucu MYSQL.

-MYSQL e geç bağlanması ile ilgili, sadece mobilden bağlanırken mi 10 saniye bekletiyor? Delphide connectionu aktif etmek istediğinde de bekletiyorsa sunucu kısmında firewall ayarlarını kontrol etmen gerekiyor, şuan bende böyle bir sorun var firewallı kapatırsam mobilden de delphi üzerinden de 1-2 saniye içinde bağlanıyor diğer türlü 10 saniye bekliyorum.

-Açılışta uzun süre siyah ekranda kalması ile ilgi, birden fazla form kullanıyorsan sadece açılışta tek form yüklenecek şekilde ayarlamalısın ve bu form çok sade olmalı özellikle forma gömülü görsel ögeler vb olmamalı ve en önemlisi connectionu form creatte aktif etmemen lazım form açıldıktan sonra aktif etmen lazım (kullanıcı internete erişebiliyor mu gibi kontroller de yapabilirsin aktif etmeden önce), 10 saniye sorunu çözülmemiş ise http://youtu.be/bzEzOU3EWI4 bu komponent ile kullanıcıya 'Sunucuya Bağlanılıyor' gibi bir bekleme yapabilirsin illaki bekleteceksek siyah ekranda bekletmeyelim bari :) bu şekilde uygulama hızlı açılır ama genel sorunlarına çözüm değil tabi.

Kullanıcı mobil veri ile bağlıysa yer yer interneti gidip gelebiliyor bu zamanlarda connection ve aktif queryler düşüyor bunların tekrar bağlanması querylerin sorgularını yenilemesi vs yine bir sürü zaman alıyor bu nedenle connection dışında aktif query bırakmamaya çalışıyorum sürekli aktif olması gereken bi query varsa örneğin kullanıcı login oldu adı soyadı yada ID si sürekli lazım bu bilgileri formda değişkene atıyorum ve orda tutuyorum bağlantı kopmalarında bu bilgiler kaybolmamış oluyor. Bence pek sağlıklı bir yol değil gibi bu şekilde bağlanmak ama pratik oluyor, eğer wifi kullanacaklarını hedef alırsak (yada mobil veri altyapısının gelişmesini beklersek) bu sorun genelde yaşanmıyor. SQL sorgularında fazla sorun yaşamadım tablolar küçük ve kullanıcı sayısı az henüz performans için gerekli şartlar oluşmadı ama şuan gayet hızlı sorgular.

Umarım işine yararlar, ben de merakla beklemekteyim diğer yorumları.

Genel olarak bi yorum yapmak gerekirse bence şu aşamada profesyonel bir mobil uygulama yapmaktan ziyade component geliştiricilerini takip etmek neleri kullanacağını seçmek, araştırma yapmak ve delphinin ve mobil ağ yapısının gelişmesini beklemek en iyisi gibi, örneğin splash screen ile ilgili xe7 öncesi sürümlerde kendi imkanların ile (deploy kısmında eklenecek resmin yolunu eklemek diğer dosyalarda manuel bir takım değişiklikler yapmak vs) bunu ekliyoduk şimdi ise ayarlar kısmında iconu ekler gibi ekliyoruz hiç bir zahmeti yok bu gibi kolaylıklar her versiyonda eklenerek geliyor, xe serisi bir süre sonra delphi 7 sürümü gibi en işe yarar ve stabil halini alacak ondan sonra bi çok şey daha kolay olacaktır (componentler de bu sürede gelişimini tamamlamış olacaklar)
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: Android Database işleminde hangi yöntem?

Mesaj gönderen barisatalay »

Merhabalar,
böyle işlemleri (Uzun süreli download,Uzun süreli veritabanı kaydı vb.) main thread üzerinde yapmak android cihaz bakımından çoğunlukla sıkıntılara sebeb olduğu aşikardır.

Tavsiyem böyle işlemler için bir thread classı türetip onun üzerinden gidin veya anlık bir işlem ise aşağıda vereceğim kodlar işinizi görebilir.

Kod: Tümünü seç

  TThread.CreateAnonymousThread(procedure
  begin
    //Çalışacak kodlar..
  end).Start
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Android Database işleminde hangi yöntem?

Mesaj gönderen thelvaci »

Merhaba, malumunuz olduğu üzere mobil ortamlar kısıtlı imkanların olduğu ve stabil olmayan ortamlardır. Sizin yerinizde olsam; herhangi bir veritabanı ile direkt uzak bağlantı kurmaktan kaçınırdım. İnternet bağlantısı stabil olmadığı için sık sık kesintiye uğrayabilir ve bağlantıyı yeniden kurmak durumunda kalırsınız. Veritabanı programlamada en maliyetli işlemlerden birisidir bağlantı kurmak.

Direkt veritabanı bağlantısı yerine; 3 katmanlı bir mimari kullanırdım. Bunun için her ne kadar henüz yeterli performansı sergilemiyor olsa da; Datasnap uygundur kanaatimce. Bu bağlamda; orta katman(datasnap) ile haberleşir iken; json formatını kullanır verilerinizi gönderir ve alırsınız. Böylelikle stateless bir uygulama yazmış olursunuz. Tabii; verilerinizi tutacağınız bir de Memory DataSet'e ihtiyacınız var. Bunun için ClientDataSet kullanabileceğiniz gibi FireDAC'ın memory dataset'ini de kullanabilirsiniz.

Memory dataset kullandığınızda ise delta kayıtların aktarımı olayını yönetmelisiniz. Bunun haricinde; kullanıcıların uzun süre bekleme hissini bertaraf edebilmek adına; Barış bey'in de bahsettiği üzere Thread kullanabilirsiniz.

Ayrıca bu tartışma'da da işinize yarar bilgiler bulabilirsiniz.
Kullanıcı avatarı
clayhuseyin
Üye
Mesajlar: 5
Kayıt: 24 Kas 2010 02:44

Re: Android Database işleminde hangi yöntem?

Mesaj gönderen clayhuseyin »

Merhaba Arkadaşlar;
Evet Mobil cihazlarda database bağlantı için en güvenli ve hızlı yok DataSnap kullanmanız ve verileriniz json olarak iletilmesi yazmış olduğum Volitan programı bu şekilde 2 yıldır sorunsuz ve saniyeler içinde server client olarka çalışıyor bu durumda datasnap örneklerine bakarak veya yardım isterseniz seve seve yardımcı olurum. Play store deadımı veya volitan olarak aratırsanız programıda incelersinzi ayarlar için mesaj atın.
Bay_Y
Üye
Mesajlar: 116
Kayıt: 10 Mar 2014 11:12
Konum: İstanbul

Re: Android Database işleminde hangi yöntem?

Mesaj gönderen Bay_Y »

merhaba , bağlantı için örnek bir kodunuz var mı rica etsek özel değilse paylaşabilir misiniz .
Sadece bağlantı okuma ve yazma rutinlerini.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Android Database işleminde hangi yöntem?

Mesaj gönderen tayipk »

ben mssql veritabanındaki veriyi yaklaşık 38.000 kaydı mobil cihazda unidac ile 3 sn de alabiliyorum. bağlanması ise 1-1,5 sn civarı

uniconnection
uniquery
sqlserveruniprovider

hepsi bu
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Bay_Y
Üye
Mesajlar: 116
Kayıt: 10 Mar 2014 11:12
Konum: İstanbul

Re: Android Database işleminde hangi yöntem?

Mesaj gönderen Bay_Y »

ilgi ve alakanıza Teşekkür ederim .
Cevapla