問題タブ [astyanax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - AstyanaxでCassandraCQLクエリを実行するにはどうすればよいですか?
Astyanaxバージョン1.56.26とCassandraバージョン1.2.2を使用しています
わかりました、少し状況の概要:
私は次のようにcqlshを使用して非常に単純な列ファミリーを作成しました。
CREATE TABLE users ( name text PRIMARY KEY, age int, weight int );
列ファミリーにデータを入力しました(空の列はありません)
users
cqlshを介してクエリを実行すると、期待される結果が得られますプログラムでクエリを実行したい
users
ので、次のようにします。
weight
NPEの割り当て中にスローされます!:(
私の理解では、行キーとしてresult
含まれている行に関連付けられているすべての列が含まれている必要があり"bobbydigital"
ます。"weight"
次に、名前の付いた列の値を整数変数に割り当てようとしましたweight
。columns
割り当ての直後にデバッグコードを追加すると、次のよう に変数が割り当てられることがわかります。
次の出力が得られます。
Column names = [, age, weight]
では、なぜnullポインターなのですか?誰かが私がどこで間違ったのか教えてもらえますか?また、なぜ空白の列名があるのですか?
更新:
また、次のように別の方法でクエリを実行しようとすると、次のようになります。
次の例外が発生します。
InvalidRequestException(why:Not enough bytes to read value of component 0)
あなたが提供できるどんな助けにも前もって感謝します!
cassandra - Astyanax IndexQuery 実行のすべての結果を取得できません
Astyanax クライアントを使用して、Cassandra 列ファミリーからデータを読み取っています。私の要件は、astyanax を介して列ファミリーのセカンダリ インデックス列に対してクエリを実行することです。astyanax の Web サイトから、インデックス列の式を使用して Cassandra からデータを読み取る例をいくつか見つけることができました。例を使用して独自のコードを記述しました。
これは、このコードの実行中に直面している問題です。列ファミリーにはクエリ条件を満たす行が数千あるのに、100 行しか返されないということです。
問題に対処するための適切な API/パターンが見つかりません。この問題について誰か教えてください。
Astanax バージョン: 1.56.24 Apache Cassandra バージョン: 1.1.8 Jdk バージョン: 1.7 プラットフォーム: Rhel 5.4 32 ビット
java - astyanaxは順序付けられた列名を返すことができますか?
com.netflix.astyanaxを使用して、次のように特定の行のエントリを追加します。
後で、次のコマンドですべての列を取得します。
以下は、私が追加したすべての列を正しく返しますが、列はデータベースに入力されたときに従って順序付けられていません。各列にはタイムスタンプが関連付けられているので、これを正確に行う方法があるはずですが、私にはわかりません。ある?
注:ない場合は、上記のコードをいつでも次のように変更できます。
次に、列の値を取得し、それに応じて並べ替えますが、各列にはすでにタイムスタンプがあるため、面倒で非効率的でばかげているように見えます。
java - cassandraファミリを宣言するときにcolumn_metadataを指定することは、常に良い考えですか?
column_metadataを使用して任意の列の構成を提供できることは知っていますが、多くの場合、列固有の構成は必要ありません。その場合、家族を作成するときにcolumn_metadataを使用することに利点はありますか?
具体的には、書面での利点はありますか?
それ以外の
java - Cassandra の更新が一貫して機能しない
ローカル (mac) マシンとリモート UNIX サーバーで次のコードを実行します。
ローカルでは、その行は実行されません。これは理にかなっています。
しかし、その行は私の開発サーバーで実行されます:
[エラー] [メイン] [nowsdSessionDaoCassandraImpl] [2013-03-08 13:12:24,801] [] - 値 3 はリストから削除されるはずでした [3, 2, 1, 0, 7, 6, 5, 4, 9, 8] しかし、そうではありませんでした: [3, 2, 1, 0, 7, 6, 5, 4, 9, 8]
- com.netflix.astyanax を使用しています
- ローカル マシンとリモート dev サーバーの両方がまったく同じ cassandra インスタンスに接続しています。
- 私のローカル マシンとリモート開発サーバーの両方で、まったく同じテストが実行され、新しい行ファミリーが作成され、1 つが削除される前に 10 個のレコードが追加されます。
- dev でエラーが発生した場合、log.error("ロケーションを削除できませんでした" + value, e); 実行されませんでした (つまり、削除コマンドを実行しても例外は発生しませんでした)。
- 私は dev でテストを実行している間、他のコードがデータベースの内容に影響を与えていないことを 100% 確信しているので、これは奇妙な同時実行の問題ではありません。
deleteColumn(value) リクエストがエラーを生成せずに実行されるが、それでもデータベースから列が削除されないことを説明できるものは何ですか?
追加情報
キースペースの作成方法は次のとおりです。
上記のコードで VALUES_CF として参照されている列ファミリーの値を作成する方法は次のとおりです。
上記の Java コードで参照されているキースペースがどのように定義されているかを次に示します。
getBuilder は次のとおりです。
2回目の更新
まず、問題は削除だけに関連するものではありません。データベース内のレコードを更新し、それらを読み取り、書き込んだばかりの更新を読み取ることができないときに、同様の問題を観察します
次に、次の操作を 100 回実行するテストを作成しました。
- カサンドラに行を書き込む
- カサンドラでその行を更新します
- カサンドラからその行を読み返し、行が実際に更新されたかどうかを確認し、更新されていない場合は遅延後に定期的に再度確認します
そのテストから私が観察したことは、次のことです。
- 繰り返しますが、そのコードをローカルで実行すると、100 回の反復すべてがすぐに完了します (再試行は必要ありません)。
- そのコードをリモートサーバーで実行すると、繰り返しの一部が成功し、一部が失敗します。それらが失敗すると、遅延がどれほど大きくても (私は最大 10 秒待ちます)、テストは常に失敗します。
この時点で、テストのためにまったく同じサーバーに接続し、挿入する遅延が接続時にテストを実行する必要がある可能性のある追加の遅延よりもはるかに大きいため、cassandra のセットアップがこの動作をどのように説明できるかは本当にわかりません。私のローカルマシンから。
唯一の関連する違いは、コードが実行されているマシンのようです。
3回目の更新
前回の更新で説明したテストで、2 つの書き込みの間に遅延を挿入すると、遅延が 1,000 ミリ秒以上の場合にコードが通過し始めます。たとえば、100 ミリ秒の遅延は役に立ちません。また、デフォルトの読み取りと書き込みの一貫性を最も要求の厳しい ALL に設定するようにビルダーを変更しましたが、テストの結果には影響しませんでした (書き込み間の遅延が 1 秒を超えない限り、約半分の時間で失敗します)。
cassandra - astyanaxと複合列を使用してcassandraで遠隔クエリを実行する方法
私はcassandraとastyanaxを使用してブログを開発しています。もちろん、これは単なる演習です。
CF_POST_INFO列ファミリーを次のようにモデル化しました。
そして、投稿は次のように保存されます。
アイデアは、ある時間のバケツのような行を持つことです(たとえば、月または年に1行)。
たとえば、最後の5つの投稿を取得したい場合、どうすればそのための怒りのクエリを実行できますか?投稿ID(UUID)に基づいて怒りのクエリを実行できますが、別のクエリを実行して取得しないと、使用可能な投稿IDがわかりません。ここでのカサンドラのベストプラクティスは何ですか?
もちろん、データモデルに関する提案は大歓迎です。私はcassandraの初心者です。
astyanax - Astyanax: simple write throwing this exception: Not enough bytes to read value of component
I am new to astyanax and trying some sample programs and getting this error. This is a simple write and looks like am doing some thing basic wrong. Not using composite keys.
Here's the code:
Here's the table describe:
cassandra - Astyanax: MutationBatch が途中で失敗した場合、どのような保証がありますか?
0.8 の時点で、Cassandra は行の更新がアトミックであることを保証しています。
ただし、(MutationBatch を使用して) いくつかの行の変更または複数の列ファミリにわたる変更を準備した場合、設定した順序で行が更新されることが保証されますか? 例えば私が持っている場合
- CF 1、行 1 を更新
- CF 1、行 2 を更新
- CF 2、行 3 を更新
障害により CF 1 が変更されていない状態で、CF 2 が更新される可能性はありますか?
私が設定した場合はどうなりますか:
- CF 1、行 1、列 A を更新
- CF 1、行 2 を更新
- CF 2、行 3 を更新
- CF 1、行 1、列 B を更新
または、代わりに 3 つの MutationBatches を準備して、それらを個別に実行する必要がありますか?
cassandra - Astyanax を使用してプレフィックス付きの列のクエリが機能しない
次のようなスキームがあります。
- タイムスタンプ
- デバイスID
- 装置名
- デバイス所有者
- デバイスの場所
CQL を使用してこの列ファミリーを作成し、主キーを として定義しました(TimeStamp,Device ID, Device Name)
。DeviceID、名前、およびフィールド名 ( または のいずれDevice Owner
かを格納するDevice Location
) のフィールドを持つシリアル化可能なオブジェクトを介して。Astyanax を使用していくつかのレコードを挿入しました。
私の理解によると、行の列は、フィールド名を列名として、その特定のフィールドの値となる値を組み合わせることによって作成されDevice ID
ますDevice Name
。したがって、特定のタイムスタンプとデバイスの場合、列名はパターンになります (Device ID:Device Name: ...)
。
したがって、これら 2 つのフィールドをプレフィックスとして使用して、特定の時間とデバイスの組み合わせのすべてのエントリを取得できると思います。
次のクエリを使用して結果を取得しています。
しかし、上記のクエリを実行すると、次の例外が発生します。
BadRequestException: [host=localhost(127.0.0.1):9160, latency=6(6), attempts=1]InvalidRequestException(理由: コンポーネント 0 の値を読み取るのに十分なバイト数がありません)
@abhi この列ファミリーで使用できるデータは次のとおりです。
これに使用している Java シリアライズ可能な Java クラスは次のとおりです。
上記のクラスの構造に従って、列ファミリーの列を次のように見ることができます: Columne Name: dev\:01\:02:1:location Column Value: 00000001
astyanax 1.56.31を使用した参考までに