Travaillez avec riak 2.0.x à partir de python 3.4. La documentation du client python est disponible à l'adresse http://basho.github.io/riak-python-client/index.html.
Vous pouvez installer riak 2.0.4 avec la commande brew. La commande brew semble être en retard sur la dernière, donc si vous souhaitez la mettre à jour, veuillez le faire vous-même.
% brew install riak
Définissez les paramètres pour modifier le descripteur de fichier. Il semble que cela ne démarrera que si ceux-ci sont mis en œuvre.
/Library/LaunchDaemons/limit.maxfiles.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>65536</string>
<string>65536</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
/Library/LaunchDaemons/limit.maxproc.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
Redémarrez le système d'exploitation ici.
Vérifiez les paramètres après le démarrage.
% launchctl limit
cpu unlimited unlimited
filesize unlimited unlimited
data unlimited unlimited
stack 8388608 67104768
core 0 unlimited
rss unlimited unlimited
memlock unlimited unlimited
maxproc 2048 2048
maxfiles 65536 65536
Si vous affichez pong, c'est OK.
% riak start
% riak ping
pong
Définissez allow_mult sur true. Tout d'abord, vérifiez l'emplacement du fichier de paramètres qui a été généré automatiquement au démarrage.
$ riak config effective | grep allow_mult
buckets.default.allow_mult = false
Les informations de sortie ci-dessus étaient fausses, alors changez-les en true.
$ sudo echo "buckets.default.allow_mult = true" >> /usr/local/Cellar/riak/2.0.4/libexec/etc/riak.conf
Redémarrez riak et assurez-vous que c'est vrai.
$ riak restart
$ riak config effective | grep allow_mult
buckets.default.allow_mult = true
Installez le client riak-python officiel.
% pip install riak
% ipython
import riak
client = riak.RiakClient()
bucket = client.bucket('manifestations')
obj = bucket.new('4873113938', data={
'title': 'Première 3e édition de Python',
'creator': 'Mark Lutz',
'isbn': '4873113938'
}).store() # -> <riak.riak_object.RiakObject at 0x10a663898>
obj = bucket.new('4797372273', data={
'title': 'Fun Ruby 4e édition',
'creator': 'Masayoshi Takahashi',
'isbn': '4797372273'
}).store() # -> <riak.riak_object.RiakObject at 0x10a6b4470>
print(bucket.get('4873113938').data) # -> {'creator': 'Mark Lutz', 'title': 'Première 3e édition de Python', 'isbn': '4873113938'}
bucket.get_keys() # -> ['4873113938', '4797372273']
print(bucket.multiget(['4873113938','4873113938'])) # -> [<riak.riak_object.RiakObject object at 0x10a6b45f8>, <riak.riak_object.RiakObject object at 0x10a787a90>]
bucket.delete('4873113938')
print(bucket.get('4873113938').data) # -> None
bucket.get_keys() # -> ['4797372273']
Une fonction qui vous permet d'augmenter ou de diminuer la valeur numérique. Cela aide à être standard. C'est un mystère que vous devez stocker () après avoir incrémenté ...
$ riak-admin bucket-type create counters '{"props":{"datatype":"counter"}}'
$ riak-admin bucket-type activate counters
$ ipython
import riak
from riak.datatypes import Counter
client = riak.RiakClient()
bucket = client.bucket_type('counters').bucket('manifestations')
counter = Counter(bucket, 'manifestations')
counter.value # -> 0
counter.increment()
counter.store()
counter.value # -> 1
Dans l'état initial, la fonction de recherche (recherche) devrait être désactivée, mais vérifions-la pour le moment. Si elle est désactivée, modifiez le paramètre et redémarrez riak.
$ riak config effective | grep "search ="
search = off
$ sudo sed -e 's/search = off/search = on/' -i.back /usr/local/Cellar/riak/2.0.4/libexec/etc/riak.conf
$ riak restart
ok
$ riak ping
pong
$ riak config effective | grep "search ="
search = on
C'est un problème, mais je vais le régler.
% wget https://raw.githubusercontent.com/basho/yokozuna/develop/priv/default_schema.xml
% ipython
import riak
client = riak.RiakClient()
f = open('default_schema.xml')
content = f.read()
f.close()
schema_name = '_yz_default'
client.create_search_schema(schema_name, content)
client.create_search_index('manifestation_index','_yz_default')
Créez un type de compartiment.
$ riak-admin bucket-type create manifestation_index '{"props":{"search_index":"manifestation_index"}}'
manifestation_index created
$ riak-admin bucket-type activate manifestation_index
manifestations has been activated
J'essaierai l'enregistrement et la recherche de données.
$ ipython
import riak
client = riak.RiakClient()
bucket = client.bucket_type('manifestation_index').bucket('books')
book = bucket.new('4621088629', {'title_s': 'Histoire de l'astronomie orientale', 'isbn_s': '4621088629', 'price_i': 1080, 'creator_s': 'Nakamura', 'date_of_publication_dts': '2014-10-25T00:00:00Z'})
book.store()
book = bucket.new('4864102538', {'title_s': 'Sonde spatiale', 'isbn_s': '4864102538', 'price_i': 4320, 'creator_s': 'Philip Segera', 'date_of_publication_dts': '2013-08-06T00:00:00Z'})
book.store()
book = bucket.new('4422420046', {'title_s': 'Le plus beau livre d'images d'éléments au monde', 'isbn_s': '4422420046', 'price_i': 4104, 'creator_s': 'Théodore Gray', 'date_of_publication_dts': '2010-10-22T00:00:00Z'})
book.store()
book = bucket.new('4087472221', {'title_s': 'Crête de montagne des dieux <ci-dessus>', 'isbn_s': '4087472221', 'price_i': 788, 'creator_s': 'Oreiller Yume 獏', 'date_of_publication_dts': '2000-08-01T00:00:00Z'})
book.store()
book = bucket.new('408747223X', {'title_s': 'Crête de montagne des dieux <ci-dessous>', 'isbn_s': '408747223X', 'price_i': 864, 'creator_s': 'Oreiller Yume 獏', 'date_of_publication_dts': '2000-08-01T00:00:00Z'})
book.store()
book = bucket.new('4163537406', {'title_s': 'Eaux hostiles', 'isbn_s': '4163537406', 'price_i': 119, 'creator_s': 'Peter Haksozen', 'date_of_publication_dts': '1998-01-01T00:00:00Z'})
book.store()
bucket.get_keys() # -> ['4422420046',
'4163537406',
'4087472221',
'408747223X',
'4621088629',
'4864102538']
results = client.fulltext_search('manifestation_index', 'title_s:Dieu*')
for doc in results['docs']:
bucket = client.bucket_type(doc['_yz_rt']).bucket(doc['_yz_rb'])
b = bucket.get(doc['_yz_rk'])
print(b.data)
# -> {'creator_s': 'Oreiller Yume 獏', 'title_s': 'La crête de la montagne des dieux', 'price_i': 788, 'date_of_publication_dts': '2000-08-01T00:00:00Z', 'isbn_s': '4087472221'}
{'creator_s': 'Oreiller Yume 獏', 'title_s': 'Crête de montagne des dieux <ci-dessous>', 'price_i': 864, 'date_of_publication_dts': '2000-08-01T00:00:00Z', 'isbn_s': '408747223X'}
results = client.fulltext_search('manifestation_index', 'price_i:[* TO 1000]')
for doc in results['docs']:
bucket = client.bucket_type(doc['_yz_rt']).bucket(doc['_yz_rb'])
b = bucket.get(doc['_yz_rk'])
print(b.data)
# -> {'creator_s': 'Oreiller Yume 獏', 'title_s': 'Crête de montagne des dieux <ci-dessus>', 'price_i': 788, 'date_of_publication_dts': '2000-08-01T00:00:00Z', 'isbn_s': '4087472221'}
{'creator_s': 'Oreiller Yume 獏', 'title_s': 'Crête de montagne des dieux <ci-dessous>', 'price_i': 864, 'date_of_publication_dts': '2000-08-01T00:00:00Z', 'isbn_s': '408747223X'}
{'creator_s': 'Peter Haksozen', 'title_s': 'Eaux hostiles', 'price_i': 119, 'date_of_publication_dts': '1998-01-01T00:00:00Z', 'isbn_s': '4163537406'}
Si vous utilisez la propriété siblings de la variable d'instance riak.riak_object.RiakObject, vous obtiendrez plusieurs éléments dans la liste. Dans ce cas, il est préférable de le supprimer avec la méthode de suppression, puis de le réenregistrer. J'aimerais qu'il y ait un moyen de tout supprimer en même temps ...
Recommended Posts