2017-01-16 9 views
1

私はまだSQLソリューションなしで新しく、数ヶ月前からnosqlを学び始めました。Javaでapache sparkを使用してcassandraをクエリすると処理が遅くなります。

私はプロジェクトがあり、それはスプリングブートフレームワークによって構築され、DAOレイヤーを持っています。私のデータベースはcassandraで、私はdatastax java cassandraドライバを使って通信しています。私はcassandraを見つけました。あるいは、おそらくすべてのnosqlのキー/バリューソリューションは、大文字と小文字を区別し、 "like%like"の使用例をサポートしていません。 stackoverflowやその他のフォーラムを通じていくつかの調査を行った後、apache spark、elastic search、またはapache luceneのようなツールを使用して、cassandraのデータを掘り起こす必要があることを理解してください。だから、私はapache sparkを選んだので、コードをこのように(ベストプラクティスの面で)実行すべきかどうかはわかりません。ここで

は、データを照会するために私のコードです:

@Override 
    public Login getLoginByEmail(String shopId, String email) throws InterruptedException, ExecutionException { 

     JavaFutureAction<List<Login>> loginRDDFuture = javaFunctions(getSparkContext()) 
       .cassandraTable("shop_abc", "app_login", loginRowReader) 
       .filter(new Function<Login, Boolean>() { 

        private static final long serialVersionUID = 1L; 

        @Override 
        public Boolean call(Login login) throws Exception { 
         return login.getEmail().equalsIgnoreCase(email.trim()); 
        } 
       }).collectAsync(); 

     List<Login> lgnList = loginRDDFuture.get(); 

     if(lgnList.size() > 0){ 
      return lgnList.get(0); 
     } 

     return null; 
    } 

それが唯一のテーブルと3つのレコードを結果とデータベースを取得するために私に9秒かかりました。私は何百万人ものレコードがデータベースならばどうなるのだろうと思います。

私はこれが良い練習であるか、それを行うためのより良い道具かより良い道具を持っているか分かりません。私は誰かが私に指導を与えることを願っています。

ありがとうございます。

答えて

0

C *データベースからすべてのデータを取得し、トークン範囲でクエリを分割し、それらをRDDにマッピングしてスパークジョブを使用してフィルタする必要があるため、この種のクエリはかなり遅くなると思います。あなたのデータセットが小さくても、それはかなりのオーバーヘッドを持つことになりますが、9秒はかなり長いように見えますが、あなたの環境についてもっと知りません。

また、SSTable Attached Secondary Indices (SASI)を使用したことがありますか? SASIはC * 3.4で導入され、あなたは大文字小文字の区別の有無にかかわらずカサンドラとLIKE %問い合わせを行うことができ、すなわちました:

CREATE CUSTOM INDEX fn_suffix_allcase ON cyclist_name (firstname) 
USING 'org.apache.cassandra.index.sasi.SASIIndex' 
WITH OPTIONS = { 
    'mode': 'CONTAINS', 
    'analyzer_class':'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer', 
    'case_sensitive': 'false' 
}; 

SASI上の参照のために良い話がSASI: Cassandra on the Full Text Search Rideです。

+1

ちょっと前にSASIを調べてください。私の問題はこの提案によって解決できるように見えます。私はそれがcassandraの一部であったので、私はこれを実装します、そして、私はそう多くのサードパーティのライブラリを注入する必要はありません。私はGoogleを介して検索し、ほとんどすべてのトップ提案を読んでいるが、そのうちの誰もこれを紹介していない。ありがとう@アンディ・トゥルベール – A1ucard

関連する問題