Manipuliere Riak aus Python

Überblick

Arbeiten Sie mit riak 2.0.x aus Python 3.4. Die Dokumentation für den Python-Client finden Sie unter http://basho.github.io/riak-python-client/index.html.

Vorbereitung

Installieren Sie riak

Sie können riak 2.0.4 mit dem Befehl brown installieren. Der Befehl Brew scheint hinter dem neuesten zu stehen. Wenn Sie ihn aktualisieren möchten, tun Sie dies bitte selbst.

% brew install riak

Nehmen Sie Einstellungen vor, um den Dateideskriptor zu ändern. Es scheint, dass es nicht starten wird, wenn diese nicht implementiert sind.

/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>

Starten Sie das Betriebssystem hier neu.

Überprüfen Sie die Einstellungen nach dem Start.

% 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   

riak start

Wenn Sie Pong anzeigen, ist es OK.

% riak start
% riak ping
pong

Einstellungen ändern

Setzen Sie allow_mult auf true. Überprüfen Sie zunächst den Speicherort der Einstellungsdatei, die beim Start automatisch generiert wurde.

$ riak config effective | grep allow_mult
buckets.default.allow_mult = false

Die obigen Ausgabeinformationen waren falsch. Ändern Sie sie daher in "wahr".

$ sudo echo "buckets.default.allow_mult = true" >> /usr/local/Cellar/riak/2.0.4/libexec/etc/riak.conf

Starten Sie riak neu und stellen Sie sicher, dass es wahr ist.

$ riak restart
$ riak config effective | grep allow_mult
buckets.default.allow_mult = true

Installieren Sie den Riak-Client

Installieren Sie den offiziellen riak-python-client.

% pip install riak

Riak als KVS

Einfaches Beispiel

% ipython
import riak
client = riak.RiakClient()
bucket = client.bucket('manifestations')
obj = bucket.new('4873113938', data={
  'title': 'Erste Python 3rd Edition',
  'creator': 'Mark Lutz',
  'isbn': '4873113938'
}).store() # -> <riak.riak_object.RiakObject at 0x10a663898>

obj = bucket.new('4797372273', data={
  'title': 'Spaß Ruby 4. Ausgabe',
  'creator': 'Masayoshi Takahashi',
  'isbn': '4797372273'
}).store() # -> <riak.riak_object.RiakObject at 0x10a6b4470>

print(bucket.get('4873113938').data) # -> {'creator': 'Mark Lutz', 'title': 'Erste Python 3rd Edition', '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']

Benutze den Zähler

Eine Funktion, mit der Sie den numerischen Wert erhöhen oder verringern können. Es hilft, Standard zu sein. Es ist ein Rätsel, das Sie nach dem Inkrementieren speichern müssen () ...

$ 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

Verwenden Sie die Volltextsuchfunktion (Yokozuna)

Vorbereitung

Im Ausgangszustand sollte die Suchfunktion (Suche) ausgeschaltet sein, aber lassen Sie es uns vorerst überprüfen. Wenn deaktiviert, ändern Sie die Einstellung und starten Sie riak neu.

$ 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

Aufbau

Es ist ein Ärger, aber ich werde es einstellen.

% 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')

Erstellen Sie einen Bucket-Typ.

$ 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

Ich werde versuchen, Daten zu registrieren und zu suchen.

$ ipython
import riak
client = riak.RiakClient()
bucket = client.bucket_type('manifestation_index').bucket('books')

book = bucket.new('4621088629', {'title_s': 'Geschichte der orientalischen Astronomie', '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': 'Weltraumsonde', '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': 'Das schönste Element Bilderbuch der Welt', 'isbn_s': '4422420046', 'price_i': 4104, 'creator_s': 'Theodore Gray', 'date_of_publication_dts': '2010-10-22T00:00:00Z'})
book.store()

book = bucket.new('4087472221', {'title_s': 'Gebirgskamm der Götter <oben>', 'isbn_s': '4087472221', 'price_i': 788, 'creator_s': 'Yume Kissen 獏', 'date_of_publication_dts': '2000-08-01T00:00:00Z'})
book.store()

book = bucket.new('408747223X', {'title_s': 'Gebirgskamm der Götter <unten>', 'isbn_s': '408747223X', 'price_i': 864, 'creator_s': 'Yume Kissen 獏', 'date_of_publication_dts': '2000-08-01T00:00:00Z'})
book.store()

book = bucket.new('4163537406', {'title_s': 'Feindliche Gewässer', '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:Gott*')
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': 'Yume Kissen 獏', 'title_s': 'Gebirgskamm der Götter <oben>', 'price_i': 788, 'date_of_publication_dts': '2000-08-01T00:00:00Z', 'isbn_s': '4087472221'}
{'creator_s': 'Yume Kissen 獏', 'title_s': 'Gebirgskamm der Götter <unten>', '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': 'Yume Kissen 獏', 'title_s': 'Gebirgskamm der Götter <oben>', 'price_i': 788, 'date_of_publication_dts': '2000-08-01T00:00:00Z', 'isbn_s': '4087472221'}
{'creator_s': 'Yume Kissen 獏', 'title_s': 'Gebirgskamm der Götter <unten>', 'price_i': 864, 'date_of_publication_dts': '2000-08-01T00:00:00Z', 'isbn_s': '408747223X'}
{'creator_s': 'Peter Haksozen', 'title_s': 'Feindliche Gewässer', 'price_i': 119, 'date_of_publication_dts': '1998-01-01T00:00:00Z', 'isbn_s': '4163537406'}  

Schließlich

ConflictError-Fehler

Wenn Sie die Geschwister-Eigenschaft der Instanzvariablen riak.riak_object.RiakObject verwenden, werden mehrere Elemente in der Liste angezeigt. In diesem Fall ist es besser, es mit der Löschmethode zu löschen und dann neu zu registrieren. Ich wünschte, es gäbe eine Möglichkeit, alles auf einmal zu löschen ...

Recommended Posts

Manipuliere Riak aus Python
SQL zu SQL
Bearbeiten Sie BigQuery-Tabellen von einem Python-Client aus
Verwenden Sie thingspeak aus Python
Berühren Sie MySQL in Python 3
Bedienen Sie Filemaker von Python aus
Verwenden Sie fließend Python
Greifen Sie über Python auf Bitcoind zu
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Python aus oder importieren
Verwenden Sie MySQL aus Python
Führen Sie Python aus Excel aus
Installieren Sie Python von der Quelle
Bedienen Sie Neutronen von Python!
Betreiben Sie LXC von Python aus
Erzwinge Python aus Fortran
Verwenden Sie BigQuery aus Python.
Führen Sie den Befehl von Python aus
[Python] Von Stdin lesen
Verwenden Sie mecab-ipadic-neologd von Python
Bearbeiten Sie Excel-Dateien aus Python mit xlrd (persönliches Memo)
Mit Python abflachen
Rufen Sie CPLEX von Python aus auf (DO cplex)
Deep Python hat von DEAP gelernt
Post von Python nach Slack
Grammatikfunktionen aus Python3.6 hinzugefügt
Flirte von PHP nach Python
Stellen Sie MeCab in Python 3 zur Verfügung
Informationen von tweet_id (Python)
OCR aus PDF in Python
Führen Sie das Illustrator-Skript von Python aus
Verwenden Sie MySQL von Anaconda (Python)
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Studie aus Python Hour4: Objektorientiert ②
Fragen Sie Athena von Lambda Python ab
Greifen Sie über Python auf Oracle DB zu
Studie aus Python Hour3: Funktionen
Bearbeiten Sie Tabellenkalkulationen lokal mit Python
Stoppen Sie Omxplayer vom Python-Code
Bearbeiten Sie verschiedene Datenbanken mit Python
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Installieren Sie pyenv von Homebrew, installieren Sie Python von pyenv
Studie aus Python Hour4: Objektorientiert ①
Python-Namenskonvention (ab PEP8)
Mit Skype benachrichtigen Sie mit Skype von Python!
Verwenden Sie die e-Stat-API von Python
Registrieren Sie das Redmine-Problem von Python
Rufen Sie Matlab von Python zur Optimierung auf
Führen Sie das Python-Skript aus der Batchdatei aus
Python: Tags von HTML-Daten ausschließen
Verwenden Sie Stanford Core NLP von Python
Berühren Sie Python-Objekte in Elixir
Python
Hit Schatzdaten von Python Pandas
Verwenden von Rstan aus Python mit PypeR
Installieren Sie Python von der Quelle mit Ansible