pycassaを使ってcassandraの中で画像にアクセスする方法


一、cassandra-cliを使ってkeyspaceとcolumn familyを作ります.
1、keyspaceを作成する
[default@unknown] create keyspace keyspace1
        with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy'
        and strategy_options = [{replication_factor:1}];
2、column familyを作成する.
[default@unknown] use keyspace1;
[default@keyspace1] create column family Image
        WITH comparator = UTF8Type
        AND key_validation_class=UTF8Type
        AND column_metadata = [
            {column_name: imageData, validation_class: BytesType}
        ];
二、写真のアクセス操作
1、写真の保存
import sys
import pycassa
from pycassa.columnfamily import ColumnFamily
from pycassa.pool import ConnectionPool
from pycassa.columnfamilymap import ColumnFamilyMap
import StringIO

pool = ConnectionPool('keyspace1', ['10.15.62.100:9160'])
cf_image = pycassa.ColumnFamily(pool, 'Image')

# store pictures into cassandra
file = open('/home/Image/07018720.jpg', 'rb')
data = file.read()
file.close()
cf_image.insert('07018720', {'imageData':data})
この場合、対応画像をcassandra-cliで検索すると、このような結果が得られる.
[default@keyspace1] get Image['07018720'];
d4e3bf7fb448f0a910ca63f2c46e88cd295d8b16155f0a0ed2a3563b47fad7e7d3b75229......(16    )
で、pythonを使って直接cassandraデータベースから読み取って出力すると文字化けが表示されます.
2、写真の抽出
import sys
import pycassa
from pycassa.columnfamily import ColumnFamily
from pycassa.pool import ConnectionPool
from pycassa.columnfamilymap import ColumnFamilyMap
import StringIO

pool = ConnectionPool('keyspace1', ['10.15.62.100:9160'])
cf_image = pycassa.ColumnFamily(pool, 'Image')

# read picture from cassandra
dataOut = cf_image.get('07018720').get('imageData')
file2 = open('/home/Image/07018720-bak.jpg', 'wb')
file2.write(dataOut)
file2.close
三、関連する注意事項
1、10.15.62.100上にCassandraのデータベースがあり、ポートはデフォルトの9160で、バージョンは1.0.9です.
2、pycassaのバージョンは1.7.0で、関連のインストールと使用はその公式文書を参照することができます.
3、前に見た人がCassandraデータベースに画像を保存する時に画像をByte[]に入れて、その後この数をstringタイプに変えてデータベースに入れます.このように交換するステップが増えて、更に多くの空間を占有しました.私たちはBytes Typeタイプ(CQLの中のblobタイプに対応)を使って直接画像をバイナリで読み取ったら、Cassandraデータベースに保存できます.もっと効率的です.