Sabtu, 13 Juni 2020

Pembelajaran InfluxDB, Apa itu ?

 InfluxDB, Pengertian, Instalasi, Konfigurasi


InfluxDB adalah sebuah database time series open source yang di kembangkan influxDATA. influxDB di bangun menggunakan bahasa GO dan di gunakan sebagai media penyimpanan metriks aplikasi, sensor data, hingga analisis real-time influxDB memiliki perintah yang mirip dengan SQL untuk query data,
Berikut adalah beberapa fitur yang saat ini didukung oleh InfluxDB
  • Custom datastore ditulis khusus untuk data time series
  • Memungkinkan kecepatan dan kecepatan kompresi data yang tinggi.
  • Sederhana dalam menggunakan karena query mirip SQL.
  • Tag memungkinkan seri diindeks untuk query cepat dan efisien.

Installasi Download :

Untuk Windows (dapatkan .msi): https://golang.org/dl/
GIT untuk Windows: http://git-scm.com/download/win

Membuat Database

Jika Anda menginstal InfluxDB secara lokal, perintah influx harus tersedia melalui command line. Atau bisa dengan menjalankan influx secara langsung. Outputnya akan terlihat seperti ini:
Anda bisa membuat database dengan pernyataan CREATE DATABASE <db-name>

Download dan tulis data untuk InfluxDB :

Dari terminal Anda, download file teks yang berisi data dalam format protokol garis:

Tulis data ke InfluxDB via CLI:

Atau juga bisa dengan cara langsung mengimport data txt tersebut di chronograf.

Test Queries

Untuk menggunakan databasenya : use <namaDB>
Untuk melihat semua 5 tabel : Show measurements
Maka tabel yang ada akan ditampilkan seperti gambar diatas.
Hitung jumlah nilai water_level non-null di h2o_feet: SELECT COUNT(“<<field>>”) FROM <measurements>
Select the first five observations in the measurement h2o_feet : SELECT *FROM <measurements> LIMIT <number>


Selasa, 19 Mei 2020

Graph DB (Part 2) __Gremlin dan Python

Gremlin dan Python

A. Alat

  • Java
  • Python
  • GREMLIN-Server
  • GREMLIN-Console (untuk debugging)
Untuk mendapatkan prasyarat Anda bisa mengikuti instalasi manual atau berbasis script di bawah ini. Instalasi berbasis skrip lebih cepat - instalasi manual memberi Anda lebih banyak wawasan dan kontrol atas langkah-langkah instalasi.

B. Instalasi Manual

- Menginstal Java

Ada banyak cara untuk menginstal Java dan jarak tempuh Anda mungkin beragam.
 sudo apt-get install openjdk-8-jre  
 versi java 
 versi openjdk "1.8.0_222"
 OpenJDK Runtime Environment ( build 1.8.0_222-8u222-b10-1ubuntu1 ~ 18.04.1-b10 )
 OpenJDK 64-Bit Server VM ( build 25.222-b10, mode campuran )

- Menginstal Python dan Pip

Kami menganggap Anda ingin bekerja dengan python 3.7
  sudo apt install python3.7 
  python --versi 
  Python 3.7.3
 sudo apt install python-pip 
  pip --versi 
  pip 9.0.1 dari / usr / lib / python3 / dist-paket ( python 3.7 )

- Menginstal GREMLIN-Python

  sudo -H pip instal -r requirement.txt 
 

Menginstal GREMLIN Server dan Konsol

Unduh GREMLIN Server dan opsional GREMLIN Console dan unzip file yang diunduh.

Memulai Server GREMLIN

  cd apache-tinkerpop-gremlin-server-3.4.3 
  bin / gremlin-server.sh conf / gremlin-server-modern.yaml 
 
Lihat # GREMLIN-Server_start untuk hasil yang diharapkan.

Mulai Konsol GREMLIN

  cd apache-tinkerpop-gremlin-console-3.4.3 
  bin / gremlin.sh 
 
Lihat # Gremlin-Console_start_.28for_debugging.29 untuk hasil yang diharapkan.

GREMLIN adalah bahasa yang sederhana karena menggunakan dua konstruksi bahasa pemrograman mendasar: komposisi fungsi dan fungsi bersarang . Karena dasar ini, relatif mudah untuk mengimplementasikan GREMLIN dalam bahasa pemrograman modern apa pun. Dua cara melakukan ini untuk bahasa Python disajikan dalam tutorial ini. Satu menggunakan Jython (di JVM) dan satu menggunakan Python (di CPython). Sangat disarankan agar desainer varian bahasa memanfaatkan (terutama ketika tidak menggunakan JVM) teknik pembuatan kode sumber berbasis refleksi yang disajikan. Metode ini memastikan bahwa varian bahasa selalu sinkron dengan versi rilis Apache TinkerPop Gremlin-Java yang sesuai. Selain itu, mengurangi kemungkinan metode yang hilang atau menciptakan metode yang diimplementasikan dengan buruk. Sementara GREMLIN sederhana, ada hampir 200 variasi langkah dalam GraphTraversal . Karena itu, cara mekanis untuk menanamkan bahasa host sangat disarankan. 


 



Selasa, 12 Mei 2020

Pengenalan Graph Database (Part 1)

Pengenalan NoSQL graph Database Neo4J

 

Dalam teorinya, graph terdiri dua bagian utama, yaitu node dan edge.

Node menandakan entitas, seperti manusia, barang, makanan, dan lain-lain. Sedangkan edge menandakan hubungan antar node tersebut. Jadi, graph menggambarkan sekumpulan node dengan masing-masing edge-nya. Berikut contohnya:




Graph Databases


Jadi, graph databases itu salah satu online database management system dengan operasi CRUD yang diterapkan di model data graph.
Graph databases sangat memprioritaskan relationships. Berbeda dengan database management system lain yang harus menggunakan hal-hal semacam foreign keys, atau out-of-band processing seperti MapReduce.
Pada graph databases, dengan membuat abstraksi sederhana berupa node dan edge sudah memungkinkan kita untuk membuat model yang menggambarkan problem domain kita. Hasilnya, model yang dihasilkan oleh graph databases jadi jauh lebih simpel dibandingkan dengan RDBMS dan NoSQL yang lain.
Salah satu alasan untuk menggunakan graph databases adalah performance yang cenderung stabil dibandingkan dengan relational databases dan NoSQL lainnya. Ini disebabkan karena pada graph databases, query dibatasi pada sebagian graph saja alih-alih keseluruhan graph. Ini membuat execution time menjadi jauh lebih cepat dibandingkan dengan relational databases dengan query JOIN-nya.
Alasan lain yaitu, graph databases lebih fleksibel. Artinya, kita dapat menambahkan node, label, atau subgraph tanpa harus ‘mengganggu’ fungsionalitas yang sudah ada sebelumnya.

 

Apache TinkerPop ™ adalah open source Graph Computing Framework. Di dalam dirinya sendiri, TinkerPop mewakili banyak koleksi kemampuan dan teknologi dan, dalam ekosistemnya yang lebih luas, dunia tambahan yang diperluas dari perpustakaan dan sistem grafik pihak ketiga . Ekosistem TinkerPop dapat terlihat rumit bagi pendatang baru dari semua tingkat pengalaman, terutama ketika melirik dokumentasi referensi untuk pertama kalinya.


Cassandra (Part 2) + Python

Cassandra + Python

Instalasi

Platform yang didukung

Python 2.7, 3.4, 3.5, 3.6, 3.7 dan 3.8 didukung. Baik CPython (implementasi standar Python) dan PyPy didukung dan diuji.
Linux, OSX, dan Windows didukung.

Instalasi melalui pip

pip adalah alat yang disarankan untuk menginstal paket. Ini akan menangani menginstal semua dependensi Python untuk driver pada saat yang sama dengan driver itu sendiri. Untuk menginstal driver *:
pip install cassandra-driver 
Anda dapat menggunakan pip install --pre cassandra-driver jika Anda perlu menginstal versi beta.
* Catatan : jika ingin menggunakan ekstensi opsional, instal dependensi terlebih dahulu. Driver mungkin perlu diinstal ulang jika dependensi ditambahkan setelah instalasi awal.

Memverifikasi Instalasi Anda

Untuk memeriksa apakah instalasi berhasil, Anda dapat menjalankan:
 python -c 'import cassandra; print cassandra.__version__' 
Seharusnya mencetak sesuatu seperti "3.22.0".

( Opsional ) Grafik DataStax

Driver menyediakan API grafik lancar yang tergantung pada Apache TinkerPop (gremlinpython). Ini tidak diinstal secara default. Agar dapat membangun lintas GREMLIN, Anda perlu menginstal persyaratan grafik :
 pip install cassandra-driver[graph] 
Lihat DataStax Graph Fluent API untuk detail lebih lanjut tentang API ini.

( Opsional ) Dukungan Kompresi

Kompresi secara opsional dapat digunakan untuk komunikasi antara pengemudi dan Cassandra. Saat ini ada dua algoritma kompresi yang didukung: snappy (di Cassandra 1.2+) dan LZ4 (hanya di Cassandra 2.0+). Jika tersedia untuk pengemudi dan Cassandra juga mendukungnya, itu akan digunakan secara otomatis.
Untuk dukungan lz4:
 pip install lz4 
Untuk dukungan cepat:
 pip install python-snappy 
(Jika menggunakan turunan Debian Linux seperti Ubuntu, mungkin lebih mudah untuk menjalankan apt-get install python-snappy .)

( Opsional ) Dukungan Metrik

Pengemudi memiliki dukungan Cluster.metrics untuk menangkap Cluster.metrics tentang kueri yang Anda jalankan. Namun, perpustakaan scales diperlukan untuk mendukung ini:
 pip install scales 

Instalasi Mempercepat

Secara default, menginstal driver melalui pip menggunakan roda khusus platform yang telah disiapkan sebelumnya jika tersedia. Jika menggunakan distribusi sumber daripada roda, Cython digunakan untuk mengkompilasi bagian-bagian tertentu dari driver. Ini membuat jalur panas tersebut lebih cepat saat runtime, tetapi proses kompilasi Cython dapat memakan waktu lama - selama 10 menit di beberapa lingkungan.
Di lingkungan di mana kinerja kurang penting, mungkin layak untuk menonaktifkan Cython seperti yang didokumentasikan di bawah ini . Anda juga dapat menggunakan CASS_DRIVER_BUILD_CONCURRENCY untuk meningkatkan jumlah utas yang digunakan untuk membangun driver dan ekstensi C apa pun:
Copy
 $ # installing from source $ CASS_DRIVER_BUILD_CONCURRENCY = 8 python setup.py install  
$ # installing from pip $ CASS_DRIVER_BUILD_CONCURRENCY = 8 pip install cassandra-driver 

Kesalahan Instalasi OSX

Jika Anda menginstal di OSX dan menginstal XCode 5.1, Anda mungkin melihat kesalahan seperti ini:
 clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future] 
Untuk memperbaiki ini, jalankan kembali instalasi dengan flag kompilasi tambahan:
Copy
 ARCHFLAGS = -Wno-error = unused-command-line-argument-hard-error-in-future pip install cassandra-driver 

Catatan Instalasi Windows

Menginstal driver dengan ekstensi di Windows terkadang menghadirkan beberapa tantangan. Beberapa catatan tentang hang-up umum:
Pengaturan membutuhkan kompiler. Saat menggunakan Python 2, ini sesederhana menginstal paket ini (tautan ini juga dipancarkan saat instalasi jika setuptools tidak dapat menemukan sumber yang dibutuhkan). Tergantung pada pengaturan sistem Anda, paket ini dapat diinstal sebagai aplikasi khusus pengguna. Pastikan untuk menginstal untuk semua orang, atau setidaknya sebagai pengguna yang akan membangun lingkungan Python.
Dimungkinkan juga untuk menjalankan build dengan kompiler pilihan Anda. Pastikan untuk memiliki pengaturan lingkungan Anda dengan jalur yang tepat. Pastikan arsitektur target kompilator cocok dengan bitime runtime Python Anda. Mungkin cara termudah untuk melakukan ini adalah menjalankan build / install dari Visual Studio Command Prompt (pintasan yang diinstal dengan Visual Studio yang sumber lingkungan yang sesuai dan menyajikan sebuah shell).

Instalasi Manual

Anda selalu dapat menginstal driver langsung dari sumber checkout atau tarball. Saat menginstal secara manual, pastikan dependensi python sudah diinstal. Anda dapat menemukan daftar dependensi di requirement.txt .
Setelah dependensi diinstal, jalankan:
 python setup.py install 

( Opsional ) Ketergantungan Non-python

Pengemudi memiliki beberapa fitur opsional yang memiliki dependensi non-Python.

C Extensions

Secara default, sejumlah ekstensi dikompilasi, menyediakan hashing yang lebih cepat untuk perutean token-aware dengan Murmur3Partitioner , integrasi loop peristiwa libev , dan ekstensi yang dioptimalkan oleh Cython.
Saat menginstal secara manual melalui setup.py, Anda dapat menonaktifkan keduanya dengan opsi --no-extensions , atau menonaktifkannya secara selektif dengan --no-murmur3 , --no-libev , atau --no-cython .
Untuk mengkompilasi ekstensi, pastikan bahwa GCC dan header Python tersedia.
Di Ubuntu dan Debian, ini dapat dilakukan dengan menjalankan:
 $ sudo apt-get install gcc python-dev 
Pada sistem berbasis RedHat dan RedHat seperti CentOS dan Fedora:
 $ sudo yum install gcc python-devel 
Pada OS X, instalasi homebrew dari Python harus menyediakan header yang diperlukan.
Lihat Catatan Instalasi Windows untuk catatan tentang mengkonfigurasi lingkungan build pada Windows.

Ekstensi berbasis cython

Secara default, paket ini menggunakan Cython untuk mengoptimalkan modul inti dan membangun ekstensi khusus. Ini bukan persyaratan yang sulit, tetapi digunakan secara default untuk membangun ekstensi yang menawarkan kinerja yang lebih baik daripada implementasi Python murni.
Ini adalah tahap pembuatan yang mahal, terutama di lingkungan yang bersih di mana kompiler Cython harus dibangun. Tahap pembuatan ini dapat dihindari dengan menggunakan sakelar bangun, atau variabel lingkungan:
 python setup.py install --no-cython 
Atau, variabel lingkungan dapat digunakan untuk mengalihkan opsi ini terlepas dari konteks:
 CASS_DRIVER_NO_CYTHON=1 <your script here> - or, to disable all extensions: CASS_DRIVER_NO_EXTENSIONS=1 <your script here> 
Metode ini diperlukan saat menggunakan pip, yang tidak menyediakan cara lain untuk menyuntikkan opsi pengguna dalam satu perintah:
 CASS_DRIVER_NO_CYTHON=1 pip install cassandra-driver CASS_DRIVER_NO_CYTHON=1 sudo -E pip install ~/python-driver 
Variabel lingkungan adalah pilihan yang lebih disukai karena mencakup semua permintaan setup.py, dan akan mencegah Cython terwujud sebagai persyaratan pengaturan.
Jika konfigurasi sudo Anda tidak mengizinkan SETENV, Anda harus menekan bendera opsi ke bawah melalui pip. Namun, pip menerapkan opsi ini untuk semua dependensi (yang memecah pada bendera kustom). Karena itu, Anda harus menginstal dependensi terlebih dahulu, kemudian gunakan opsi instal:
 sudo pip install six futures sudo pip install --install-option="--no-cython" 

dukungan libev

Driver saat ini menggunakan modul asyncore Python untuk loop acara default. Untuk kinerja yang lebih baik, libev juga didukung melalui ekstensi C.
Jika Anda menggunakan Linux, Anda harus dapat menginstal libev melalui manajer paket. Misalnya, di Debian / Ubuntu:
 $ sudo apt-get install libev4 libev-dev 
Di RHEL / CentOS / Fedora:
 $ sudo yum install libev libev-devel 
Jika Anda menggunakan Mac OS X, Anda harus dapat menginstal libev melalui Homebrew . Misalnya, di Mac OS X:
 $ brew install libev 
Ekstensi libev tidak dibangun untuk Windows (proses pembuatannya rumit, dan implementasi Windows tetap menggunakan pilih).
Jika berhasil, Anda harus dapat membangun dan menginstal ekstensi (hanya menggunakan setup.py build atau setup.py install ) dan kemudian menggunakan loop acara libev dengan melakukan hal berikut:
Copy
>>> from cassandra.io.libevreactor import LibevConnection
>>> from cassandra.cluster import Cluster
>>> cluster = Cluster ()  
>>> cluster . connection_class = LibevConnection
>>> session = cluster . connect ()
( Opsional ) Mengkonfigurasi SSL
Andrew Mussey telah menerbitkan panduan menyeluruh tentang Penggunaan SSL dengan driver DataStax Python .

Rabu, 06 Mei 2020

Pengenalan Cassandra (Part 1)

 Pengenalan dan Perintah Dasar Cassandra

Cassandra atau lengkap APACHE CASSANDRA adalah salah satu produk open source untuk menajemen database yang didistribusikan oleh Apache yang sangat scalable (dapat diukur) dan dirancang untuk mengelola data terstruktur yang berkapasitas sangat besar (Big Data) yang tersebar di banyak server. Cassandra merupakan salah satu implementasi dari NoSQL (Not Only SQL) seperti mongoDB. NoSQL merupakan konsep penyimpanan database dinamis yang tidak terikat pada relasi-relasi tabel yang kaku seperti RDBMS. Selain lebih scalable, NoSQL juga memiliki performa pengaksesan yang lebih cepat. Hal-hal itulah yang membuat NoSQL menjadi semakin populer beberapa tahun belakangan ini.

Mapping Tabel, Kolom dan Baris

Jika pada RDBMS kita mengenal tabel, maka di Cassandra ada istilah collection. Di dalam collection ada bentuk dokumen-dokumen yang sepadan dengan baris pada tabel. Dan nama-nama kolom pada tabel bisa dijumpai sebagai field di Cassandra.
Mapping Tabel, Kolom dan Baris pada Cassandra

Menggunakan Collection

Collection pada cassandra memberikan cara meningkatkan penanganan tugas-tugas kueri data, misalnya kita ingin menyimpan beberapa data email dalam satu variabel, membangun beberapa kemampuan alamat ke dalam tabel. Collection ini juga digunakan sebagai pengganti joins.

Jenis Collection

List

List digunakan dalam kasus-kasus di mana
  • urutan unsur-unsur yang harus dipertahankan, dan
  • nilai yang akan disimpan beberapa kali.
Anda bisa mendapatkan nilai-nilai tipe list data menggunakan indeks dari elemen dalam list.

Membuat Tabel dengan List

di bawah ini adalah contoh untuk membuat tabel data kontak. Untuk menyimpan beberapa email, kita menggunakan list.
CREATE TABLE data_kontak(
id uuid,
nama varchar,
email list<text>,
PRIMARY KEY(id)
);
membuat tabel data kontak dengan List

Memasukkan data ke dalam sebuah List

Sementara memasukkan data ke dalam elemen dalam list, masukkan semua nilai dipisahkan dengan koma dalam kurung siku [] seperti yang ditunjukkan di bawah ini.
memasukkan data email pada tabel data_kontak

Set

Set adalah tipe data yang digunakan untuk menyimpan sekelompok elemen. Elemen-elemen dari himpunan akan dikembalikan dalam rangka diurutkan.

Membuat Tabel dengan Set

Contoh berikut menunjukkan cara menambahkan kolom telepon pada tabel data kontak. Untuk menyimpan beberapa nomor telepon, kita menggunakan set.
menambahkan kolom telepon pada tabel data_kontak

Memasukkan data ke Set

Sementara memasukkan data ke dalam elemen dalam satu set, masukkan semua nilai dipisahkan dengan koma dalam kurung kurawal {} seperti yang ditunjukkan di bawah ini.
memasukkan nomor telepon pada tabel data_kontak

MAP

Map adalah tipe data yang digunakan untuk menyimpan pasangan kunci-nilai elemen.

Membuat Tabel dengan Map

Contoh berikut menunjukkan cara menambahkan kolom alamat pada tabel data kontak. Untuk menyimpan beberapa nilai alamat, kita menggunakan map.
menambahkan kolom alamat pada tabel data_kontak

Memasukkan data ke dalam Map

Sementara memasukkan data ke dalam unsur-unsur dalam map, masukkan semua key : value pasangan yang dipisahkan dengan koma dalam kurung kurawal {} seperti yang ditunjukkan di bawah ini.

memasukkan data alamat pada tabel data_kontak
Kesimpulan
Collection menyediakan fasilitas menggunakan tipe data, pada collection terdapat 3 jenis yaitu list, set dan map. dengan menggunakan collection kawan” bisa menyimpan beberapa nilai dalam satu variabel.

Sabtu, 18 April 2020

Tutorial Redis (Part.2)

Perintah pada Redis 

Sintaks dasar Redis klien:
$ redis-cli ←

contoh

Contoh berikut menjelaskan bagaimana untuk memulai klien Redis:
Mulai klien Redis, buka terminal dan masukkan perintahRedis-cli.Perintah ini akan menghubungkan layanan Redis lokal.
$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING

PONG
Pada contoh di atas kita terhubung ke layanan Redis lokal dan menjalankan perintah PING, yang digunakan untuk mendeteksi layanan Redis dimulai.

Tipe Data Pada Redis dan Contoh Menggunakannya

  1. String

String merupakan tipe data yang paling sering di pakai. Pada redis penggunaan string di batasi dengan ukuran 512 megabytes. Untuk menggunakannya seperti contoh  di bawah ini.
Tipe Data Pada Redis dan Contoh Menggunakannya
Tipe String
Pada Contoh di atas, terdapat 2 perintah untuk menyimpan dan memanggil string yaitu dengan SET dan GET. Pada parameter pertama setelah perinta SET/GET merupakan KEY dan parameter kedua merupakan VALUE.

2. Hashes
Dengan menggunakan tipe data hashes, kita bisa menyimpan beberapa isi pasangan FIELD dalam satu KEY. Pada tipe data ini, kita bisa menyimpan maksimal 232 – 1 pasang data. Untuk menggunakannya, anda bisa lihat contoh di bawah ini.
Tipe Data Pada Redis dan Contoh Menggunakannya
Tipe Hashes
Bisa kita lihat pada gambar diatas, untuk menyimpan HASHES saya menggunakan perintah HMSET. Pada parameter pertama (user:agus) merupakan KEY dan parameter selanjutnya merupakan pasangan pasangan field dengan beberapa macam VALUE.

3. Lists

Tipe data Lists, modelnya hampir mirip sama tipe data String. Tetapi Lists memiliki kelebihan lain yaitu dapat menyimpan beberapa VALUE pada satu KEY. Kita bisa menambahkan VALUE pada depan atau belakang data.
Tipe Data Pada Redis dan Contoh Menggunakannya
Tipe Lists
Pada contoh di atas saya menggunakan perintah LPUSH untuk menyimpan VALUE pada sebelah kiri VALUE sebelumnya. Kemudian perintah RPUSH untuk menyimpan VALUE pada sebelah kanan VALUE sebelumnya.

4. Sets

Tipe data ini memiliki struktur seperti LISTS, bedanya adalah SETS tidak memiliki urutan. Perbedaan yang lain adalah, pada SETS ketika suatu VALUE sudah exist/ ada pada KEY yang sama, maka VALUE itu tidak akan di input kembali ke dalam SETS.
Tipe Data Pada Redis dan Contoh Menggunakannya
Tipe Sets
Untuk menambahkan value, kita bisa menggunakan perintah SADD, untuk melihat VALUE nya kita bisa menggunakan perintah SMEMBERS.

5. Sorted Sets

Pada tipe data Sorted Sets, karakternya mirip seperti SETS. Tetapi kita bisa mengurutkan VALUE pada KEY yang sama.
Tipe Data Pada Redis dan Contoh Menggunakannya
TipeSorted Sets

Pada contoh di atas, untuk menambahkan data pada Sorted Sets, parameter setelah KEY adalah Urutannya. Parameter setelah urutan adalah VALUE nya. Untuk menampilkan data, kita bisa menggunakan perintah ZRANGEBYSCORE VALUE RANGE.

Semoga tulisan saya dapat bermanfaat. Kritik dan masukkan dari teman-teman sangat saya tunggu. Terus belajar dan berkarya. Terimakasih.
Referensi :
https://redis.io/


Rabu, 08 April 2020

Pengenalan database Redis (Part.1)

Pengenalan database Redis

Pengertian Redis   

     Redis adalah salah satu database dari dunia NoQSL yang berbasis key-value store. Sistemnya yang in-memory membuat pengambilan data dari Redis menjadi lebih cepat, namun dapat juga persistent bila ingin menyimpan data kita ke disk. Redis memiliki sejumlah query yang pastinya mudah digunakan untuk menyimpan mulai dari data sederhana hingga data kompleks. Selain itu dokumentasinya yang lengkap membuat kamu dapat menguasai Redis tanpa harus banyak googling.

    Redis adalah struktur data pada server. Hal ini tentunya membuatnya lebih lambat daripada hanya sekedar menyimpan data pada memori lokal. Namun Redis juga memiliki beberapa hal yang menarik, antara lain :
  • Redis bisa diakses oleh semua proses dari aplikasi yang Anda bangun.
  • Penyimpanan dalam memori oleh Redis sangat efisien dan dilakukan dalam proses yang terpisah. Jika aplikasi berjalan pada platform atau bahasa pemrograman yang boros akan memori, Redis memungkinkan penanganan alokasi memori yang jauh lebih besar.
  • Redis dapat bertahan dalam disk jika dibutuhkan.
  • Redis sedikit lebih luas dari cache yang sederhana, Redis menyediakan berbagai struktur data.
  • Redis bisa meniru aktivitas dengan mekanisme master/slave untuk mengimplementasikan high-availability dari sebuah aplikasi.

Installasi Redis 


1. Kunjungi alamat url berikut
https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100

2. Lalu download serta lalukan proses installasi hingga selesai








































Sabtu, 22 Februari 2020

Query kompleks & Fungsi Agregat dalam database MongoDB

STMIK AKAKOM YOGYAKARTA

Prodi : Rekayasa Perangkat Lunak Aplikasi

Pertama buat database
Use toko

Lalu masukan ke dalam database yang telah di buat
Seperti berikut :

db.inventory.insertMany ([
    { item : "jurnal" , jumlah : 25 , size : { h : 14 , w : 21 , uom : "cm" }, status : "A" },
    { item : "notebook" , qty : 50 , size: { h : 8.5 , w : 11 , uom : "in" }, status : "A" },
    { item : "paper" , qty : 100 , size: { h : 8.5 , w : 11 , uom : "in" }, status : "D" },
    { item : "planner" , qty : 75 , size: { h : 22.85 , w : 30 , uom : "cm" }, status : "D" },
    { item : "kartu pos" , jumlah : 45 , size : { h : 10 , w : 15.25 , uom : "cm" }, status : "A" }
 ]);

Pilih Semua Dokumen dalam Koleksi

Untuk memilih semua dokumen dalam koleksi, berikan dokumen kosong sebagai parameter filter kueri ke metode temukan. Parameter filter kueri menentukan kriteria pilih:
db.inventory.find (  {}  )
 
Operasi ini sesuai dengan pernyataan SQL berikut:
 
PILIH  *  DARI  inventory
 
Untuk informasi lebih lanjut tentang sintaks metode, lihat find().

Tentukan Kondisi Kesetaraan

Untuk menentukan kondisi kesetaraan, gunakan <field>:<value>ekspresi dalam dokumen filter kueri :
 {  <  field1  >:  <  value1  >  ,  ...  }
Contoh berikut memilih dari inventorykumpulan semua dokumen statusdengan jumlah yang sama "D":
db.inventory.find({ status : "D" } )
 
Operasi ini sesuai dengan pernyataan SQL berikut:
PILIH  *  DARI  inventory  DIMANA  status  =  "D"
 

Tentukan Kondisi Menggunakan Operator Kueri

Sebuah dokumen Filter permintaan dapat menggunakan operator permintaan untuk menentukan kondisi dalam bentuk berikut:

 {  <  field1  >:  {  <  operator1  >:  <  value1  >  },  ...  }
 
Contoh berikut mengambil semua dokumen dari inventory koleksi di mana status sama dengan "A"atau "D":
db.inventory.find({status : { $ in : [ "A" , "D" ] } } )
 
Catatan
Meskipun Anda dapat mengekspresikan kueri ini menggunakan $or operator, gunakan $in operator daripada $oroperator saat melakukan pemeriksaan kesetaraan di bidang yang sama.
Lihat dokumen Operator Kueri dan Proyeksi untuk daftar lengkap operator kueri MongoDB.

Cocokkan Dokumen Tertanam / Bertumpuk

Untuk menentukan kondisi kesetaraan di lapangan yang tertanam / bersarang dokumen, menggunakan dokumen penyaring permintaan mana adalah dokumen untuk mencocokkan. 
{ <field>: <value> }<value>
Misalnya, kueri berikut memilih semua dokumen yang bidangnya sizesama dengan dokumen :{ h: 14, w: 21, uom: "cm" }
  
db.inventory.find ( {  size  :  {  h : 14,w: 21,uom : "cm"  }} )
 
Kecocokan kesetaraan pada seluruh dokumen yang disematkan memerlukan kecocokan yang tepat dari <value> dokumen yang ditentukan , termasuk urutan bidang. Misalnya, kueri berikut tidak cocok dengan dokumen apa pun dalam inventorykoleksi:
  
db.inventory.find ( {size : { w : 21, h : 14, uom : "cm"  }})
 

Query on Nested Field

Untuk menentukan kondisi kueri pada bidang dalam dokumen tertanam / bersarang, gunakan notasi titik ( "field.nestedField").
Catatan
Saat menanyakan menggunakan notasi titik, bidang dan bidang bertingkat harus berada di dalam tanda kutip.
Contoh berikut memilih semua dokumen di mana bidang uombersarang di sizebidang sama dengan "in":

db.inventory.find ( {"size.uom"  : "in" } )

Sebuah dokumen Filter permintaan dapat menggunakan operator permintaan untuk menentukan kondisi dalam bentuk berikut:

 {<field1>:  {  <operator1>:  <value1>},  ...  }
 
Kueri berikut menggunakan kurang dari operator ( $lt) pada bidang yang hdisematkan di sizebidang:
  

db.inventory.find({"size.h":{ $lt :15}} )



Kueri berikut memilih semua dokumen di mana bidang bersarang hkurang dari 15, bidang bersarang uomsama dengan "in", dan statusbidang sama dengan "D":
db.inventory.find ( { "size.h" : { $lt : 15 } )

Query an Array of Embedded Documents

Halaman ini memberikan contoh dalam:
Halaman ini memberikan contoh operasi kueri pada array dokumen bersarang menggunakan metode db.collection.find() di mongo shell. Contoh di halaman ini menggunakan koleksi inventory . Untuk mengisi koleksi inventory , jalankan yang berikut:
 
db.inventory.insertMany( [
    {item : "jurnal", instock : [ {warehouse : "A", qty : 5 }, 
 {warehouse : "C", qty : 15 }]},
    {item : "notebook", instock : [ {warehouse : "C", qty : 5 }]},
    {item : "paper", instock : [ { warehouse : "A" , qty : 60 }, 
 {warehouse : "B", qty : 15 }]},
    {item : "planner", instock : [ {warehouse : "A", qty : 40},  
{warehouse : "B", qty : 5 }]},
    {item : "kartu pos", instock : [ {warehouse : "B", qty : 15}, 
 {warehouse : "C", qty : 35 }]}
 ]);
 

Permintaan Dokumen yang Disusun dalam Array

Contoh berikut memilih semua dokumen di mana elemen dalam instockarray cocok dengan dokumen yang ditentukan:
db.inventory.find ( { "instock" :{ warehouse :  "A"  , qty : 5 } } )
 
Kecocokan kesetaraan pada seluruh dokumen yang disematkan / disarangkan membutuhkan kecocokan yang tepat dari dokumen yang ditentukan, termasuk urutan bidang. Misalnya, kueri berikut tidak cocok dengan dokumen apa pun dalam inventorykoleksi:
  
db.inventory.find ( { "instock" : {  qty  :  5 , gudang : "A" } } )
 

Tentukan Kondisi Kueri di Bidang dalam Larik Dokumen

Jika Anda tidak tahu posisi indeks dokumen yang bersarang dalam array, gabungkan nama bidang array, dengan titik ( .) dan nama bidang dalam dokumen bersarang.
Contoh berikut memilih semua dokumen di mana instock array memiliki setidaknya satu dokumen tertanam yang berisi bidang qty yang nilainya kurang dari atau sama dengan 20:
 
 db .inventory.find ( {'instock.qty'  :  {  $ lte  :  20} } )
Menggunakan notasi titik , Anda dapat menentukan kondisi kueri untuk bidang dalam dokumen di indeks atau posisi tertentu array. Array menggunakan pengindeksan berbasis nol.
Catatan
Saat meminta menggunakan notasi titik, bidang dan indeks harus berada di dalam tanda kutip.
Contoh berikut memilih semua dokumen di mana instockarray memiliki sebagai elemen pertama dokumen yang berisi bidang qtyyang nilainya kurang dari atau sama dengan 20:
  
db.inventory.find ( {'instock.0.qty'  : { $lte  : 20 } } )
 

Tentukan Beberapa Kondisi untuk Array Dokumen

Saat menentukan kondisi pada lebih dari satu bidang yang bersarang di dalam array dokumen, Anda dapat menentukan kueri sehingga satu dokumen memenuhi kondisi ini atau kombinasi dokumen apa pun (termasuk satu dokumen) dalam array memenuhi persyaratan.
Gunakan $elemMatchoperator untuk menentukan beberapa kriteria pada larik dokumen yang disematkan sehingga setidaknya satu dokumen yang disematkan memenuhi semua kriteria yang ditentukan.
Contoh berikut menanyakan dokumen di mana instockarray memiliki setidaknya satu dokumen tertanam yang berisi bidang qtysama dengan 5dan bidang warehousesama dengan A:
  
db.inventory.find({"instock":{ $elemMatch : {qty:  5  ,gudang : "A"}}})
 
Contoh berikut ini menanyakan dokumen di mana instockarray memiliki setidaknya satu dokumen tertanam yang berisi bidang qtyyang lebih besar dari 10dan kurang dari atau sama dengan 20:

db.inventory.find( {"instock":{ $elemMatch :{qty:{ $gt:10, $lte:20}}}
})
 
Jika kondisi kueri gabungan pada bidang array tidak menggunakan $elemMatch operator, kueri memilih dokumen-dokumen yang array mengandung kombinasi elemen yang memenuhi kondisi.
Misalnya, kueri berikut cocok dengan dokumen di mana dokumen apa pun yang bersarang dalam instockarray memiliki qtybidang lebih besar dari 10dan dokumen apa pun (tetapi tidak harus dokumen tertanam yang sama) dalam array memiliki qtybidang kurang dari atau sama dengan 20:

db.inventory.find ( {"instock.qty":{$ gt : 10  , $lte : 20 }})

Contoh berikut menanyakan dokumen di mana instockarray memiliki setidaknya satu dokumen tertanam yang berisi bidang qtysama dengan 5dan setidaknya satu dokumen tertanam (tetapi tidak harus dokumen tertanam yang sama) yang berisi bidang warehousesama dengan A:
  
db.inventory.find({"instock.qty":5 ,"instock.warehouse":"A"})