2012-04-04 11 views
0

私はBlackberryでSQLiteを使って作業しようとすると、多くのハードルを克服しました。今ではすべてがうまくいくようになってきており、質問をスピードアップする方法を探しています。Blackberry SQLiteの最適なパフォーマンス

私のアプリはウェブサービスコールから多くのデータを取得することがありますが、このデータは解析されてデータベースに保存されます。多くのDELETE、INSERT、UPDATEが続いています。データベース呼び出しには多くの時間がかかるようです。

SQLiteを扱う際のベストプラクティスを知りたいと思います。ブラックベリープラットフォームでそれを経験したことがある方が特にお勧めです。 DELETEやINSERTなどの速度を上げるためのあらゆるトリック....

良いチュートリアルへのリンクは素晴らしいでしょう。あるいは、便利なコードの一部をさらに良くする。

ありがとうございます。

編集:ここでは

は、トランザクションを使用してBlackBerryからいくつかのサンプルコードです。

import net.rim.device.api.ui.*; 
import net.rim.device.api.ui.component.*; 
import net.rim.device.api.ui.container.*; 
import net.rim.device.api.database.*; 
import net.rim.device.api.io.*; 
public class UsingTransactions extends UiApplication 
{ 
public static void main(String[] args) 
{ 
    UsingTransactions theApp = new UsingTransactions(); 
    theApp.enterEventDispatcher(); 
} 
public UsingTransactions() 
{ 

} 
} 

class UsingTransactionsScreen extends MainScreen 
{ 
    Database d; 
public UsingTransactionsScreen() 
{ 
    LabelField title = new LabelField("SQLite Using Transactions Sample", 
    LabelField.ELLIPSIS | 
    LabelField.USE_ALL_WIDTH); 
    setTitle(title); 
    add(new RichTextField(
      "Updating data in one transaction in MyTestDatabase.db.")); 
    try 
    { 
     URI myURI = URI.create("file:///SDCard/Databases/SQLite_Guide/" + 
      "MyTestDatabase.db"); 
     d = DatabaseFactory.open(myURI); 

     d.beginTransaction(); 
     Statement st = d.createStatement("UPDATE People SET Age=7 " + 
      "WHERE Name='Sophie'"); 
     st.prepare(); 
     st.execute(); 
     st.close(); 
     st = d.createStatement("UPDATE People SET Age=4 " + 
      "WHERE Name='Karen'"); 
     st.prepare(); 
     st.execute(); 
     st.close(); 
     d.commitTransaction(); 
     d.close(); 
} 
catch (Exception e) 
{ 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
} 
    } 
} 

毎回ステートメントを閉じる理由はありますか?最終的に一度それを閉じるのが良いのではないでしょうか?

答えて

3

標準的な手法は、トランザクション内のループ内で準備済みの挿入文を使用することです。ほとんどの場合、それはあなたにほぼ最適な効率を与えます。物事を少なくとも一桁上げさせるでしょう。

2

私は個人的に多くのブラックベリー、具体的な実践を知らないが、これらは(残念私は、コードスニペットを見つけることができませんでした)有用であるように見える:

"Top 8 SQL Best Practices"

"Best Practice: Optimizing SQLite Database Performance"

は、これらの助けを願っています!

+0

2番目の文書はBlackberryのもので、SQLiteラッパーにはあなたが望むものを正確に行う方法が含まれているかのように見えます。最後の「一括操作方法の使用」と「明示的なトランザクションの使用」のセクションを見てください。ジャーナリングをオフにしてみることもできますが、個人的には大きな違いはありません。 –

+0

ありがとうございます。私はまた、VACUUMを使用してデータベースファイルのデフラグを行いました。どのくらいの頻度でこれを実行する必要がありますか?DBファイル自体のサイズを減らす以外の方法で役立ちますか? – PaulG

1

あなたは1つのことを行う必要があります、データベース処理コードのさまざまなメソッドを作成します。 これらのメソッドをメインコードから呼び出すと、にオープンし、が閉じるデータベースが各ブロックごとに呼び出されます。それは冗長性を減らし、将来的にはより良いものになります。これはあなたのアプリのパフォーマンスにも役立ちます。

関連する問題