2016-05-13 5 views
3

私は既存のredisデータをaerospikeにモデル化しようとしています。 1つの要件は、特定のユーザーのすべてのキーを取得できることです。たとえば、<id>:<timestamp>などのキーがあるとします。さて、ある時点では、idのすべてのキーを取得する必要があります。<id>:<timestamp>キーの値を取得するには、エアロスペクティブな名前空間のすべてのキーのインデックス検索が必要です。これが可能かどうかを知りたいのですが、そうであればどうしますか。ありがとう。Aerospikeで特定の接頭辞で始まるすべてのキーを検索することはできますか?

答えて

5

キープレフィックスのクエリを直接行うことはできません。サーバーはキーダイジェストのみを格納するので、キー値(あなたの場合は<id>:<timestamp>)は索引付けされません。

これをモデル化する方法は、別のレコードビンとしてキーの一部を<id>に追加することです。次に、そのビンを索引付けし、そのビンで照会を実行することができます。ここで

は簡単な例である - それは、エアロスパイクのNode.jsクライアントを使用していますが、コンセプトは関係なく、あなたが好むものをクライアントと同じではありません。

const Aerospike = require('aerospike') 

const ns = 'test' 
const set = 'demo' 

// connect to cluster and create index on 'id' bin 
var client = Aerospike.client() 
client.connect((err) => { 
    assertOk(err, 'connecting to cluster') 
    createIndex('id', 'id_idx', Aerospike.indexDataType.STRING,() => { 

    // create a new sample record 
    var userId = 'user1' 
    var ts = new Date().getTime() 
    var key = new Aerospike.Key(ns, set, `${userId}:${ts}`) 
    var record = { id: userId, value: Math.random() } 
    client.put(key, record, (err) => { 
     assertOk(err, 'write record') 

     // query for records with matching 'id' 
     var query = client.query(ns, set) 
     query.where(Aerospike.filter.equal('id', userId)) 
     var stream = query.foreach() 
     stream.on('error', (error) => assertOk(error, 'executing query')) 
     stream.on('end',() => client.close()) 
     stream.on('data', (record, meta, key) => { 
     console.log(record) 
     }) 
    }) 
    }) 
}) 

function assertOk (err, message) { 
    if (err) { 
    console.error('ERROR: %s - %s', message, err) 
    process.quit() 
    } 
} 

function createIndex (bin, name, datatype, callback) { 
    var index = { 
    ns: ns, 
    set: set, 
    bin: bin, 
    index: name, 
    datatype: datatype 
    } 
    client.createIndex(index, (err, job) => { 
    assertOk(err, 'creating index') 
    job.waitUntilDone(100, (err) => { 
     assertOk(err, 'creating index') 
     callback() 
    }) 
    }) 
} 

は、この情報がお役に立てば幸い!

関連する問題