├── README.md ├── astra.json ├── datastax-studio-config ├── clientid ├── connections │ └── admin │ │ ├── .418ed742-cd61-4df8-abd8-07bc56a62e8d.example │ │ └── 418ed742-cd61-4df8-abd8-07bc56a62e8d ├── eventlogs │ └── log-studio │ │ ├── 000010.sst │ │ ├── 000012.sst │ │ ├── 000014.sst │ │ ├── 000015.log │ │ ├── CURRENT │ │ ├── LOCK │ │ ├── LOG │ │ ├── LOG.old │ │ └── MANIFEST-000013 ├── history │ └── d21c3230-8446-41ea-aea6-1e85a00411e0 │ │ ├── 10_2021-03-31-17-56-44.gz │ │ ├── 10_2021-03-31-17-56-44.meta │ │ ├── 11_2021-03-31-18-01-57.gz │ │ ├── 11_2021-03-31-18-01-57.meta │ │ ├── 12_2021-04-01-08-54-41.gz │ │ ├── 12_2021-04-01-08-54-41.meta │ │ ├── 13_2021-04-01-08-55-09.gz │ │ ├── 13_2021-04-01-08-55-09.meta │ │ ├── 14_2021-04-01-08-55-37.gz │ │ ├── 14_2021-04-01-08-55-37.meta │ │ ├── 15_2021-04-01-09-00-40.gz │ │ ├── 15_2021-04-01-09-00-40.meta │ │ ├── 1_2021-03-31-08-36-27.gz │ │ ├── 1_2021-03-31-08-36-27.meta │ │ ├── 2_2021-03-31-08-36-32.gz │ │ ├── 2_2021-03-31-08-36-32.meta │ │ ├── 3_2021-03-31-08-36-34.gz │ │ ├── 3_2021-03-31-08-36-34.meta │ │ ├── 4_2021-03-31-08-36-36.gz │ │ ├── 4_2021-03-31-08-36-36.meta │ │ ├── 5_2021-03-31-08-36-40.gz │ │ ├── 5_2021-03-31-08-36-40.meta │ │ ├── 6_2021-03-31-08-36-46.gz │ │ ├── 6_2021-03-31-08-36-46.meta │ │ ├── 7_2021-03-31-08-36-48.gz │ │ ├── 7_2021-03-31-08-36-48.meta │ │ ├── 8_2021-03-31-08-36-54.gz │ │ ├── 8_2021-03-31-08-36-54.meta │ │ ├── 9_2021-03-31-08-36-58.gz │ │ └── 9_2021-03-31-08-36-58.meta ├── marker_files │ ├── .13c69bd5-a215-4f1b-bb24-bb006f7740c6.example │ ├── .577dbd0b-dcf6-496b-8a62-48b3678e776e.example │ ├── .636f7be7-3b99-4cab-9f91-bfba555612d7.example │ ├── .733fab48-95dc-4eef-8ff0-c9952a86370a.example │ ├── .ad4fb369-8941-456f-8436-23862120810d.example │ ├── .d1e1386b-e6f4-4a9d-923a-64d8e54d1a3c.example │ ├── .d21c3230-8446-41ea-aea6-1e85a00411e0.example │ ├── .da0b7dc3-1dd1-4027-bbef-4bf22e1506a4.example │ └── .fd853828-fa2d-4637-bd19-69879ef281c9.example └── snapshots │ └── studio │ ├── d21c3230-8446-41ea-aea6-1e85a00411e0 │ └── snr-253 │ ├── notebook_list │ └── snr-253 │ └── settings │ └── snr-253 ├── docker-compose.yaml ├── graph-demo └── Introduction_to_NoSQL_2022-05-16_21_38_53.studio-nb.tar ├── graph_databases.md ├── images ├── 01.png ├── 02.png ├── 03.png ├── 05.png ├── connect.png ├── cqlconsole1.png ├── graphql1.png ├── graphql2.png ├── intro-to-nosql-badge.png ├── intro-to-nosql-cover.png ├── playground.png ├── playground1.png ├── studio_create_graph.png ├── studio_home.png ├── studio_notebook_1.png ├── studio_notebook_2.png ├── studio_test_connection1.png ├── studio_test_connection2.png ├── studio_test_connection3.png ├── studio_test_connection4.png ├── swagger │ ├── swagger_3c.png │ ├── swagger_3d.png │ ├── swagger_3eB.png │ ├── swagger_3fB.png │ └── swagger_3g.png ├── swagger_responses_annotated.png ├── token.png ├── token_hl.png └── tutorials │ ├── astra-create-db.gif │ ├── astra-create-token.gif │ ├── astra_signup.gif │ └── generate_token.png ├── slides-shelovedata.pptx.pdf └── slides.pdf /README.md: -------------------------------------------------------------------------------- 1 | ## 🎓🔥 Introduction to NoSQL Databases 2 | 3 | [![License Apache2](https://img.shields.io/hexpm/l/plug.svg)](http://www.apache.org/licenses/LICENSE-2.0) 4 | [![Discord](https://img.shields.io/discord/685554030159593522)](https://discord.com/widget?id=685554030159593522&theme=dark) 5 | 6 | ![image](images/intro-to-nosql-cover.png?raw=true) 7 | 8 | These instructions will lead you step by step for the workshop on introducing the NoSQL Databases technologies. 9 | 10 | ## Materials for the Session 11 | 12 | It doesn't matter if you join our workshop live or you prefer to do at your own pace, we have you covered. In this repository, you'll find everything you need for this workshop: 13 | 14 | - [Workshop video](#) 15 | - [Slide deck](./slides.pdf) 16 | - [Discord chat](https://bit.ly/cassandra-workshop) 17 | - [Questions and Answers](https://community.datastax.com/) 18 | 19 | ## Participation Badge / Homework 20 | 21 | 22 | 23 | To get the verified badge, you have to complete the following steps: 24 | 25 | 1. Complete the practice steps of this workshop as explained below. Steps 1-4 (Astra account + tabular/document/key-value databases) are mandatory, step 5 (graph database) is optional. Take a screenshot of completion of the last step for sections 2, 3 and 4 (either a CQL command output or a response in the Swagger UI). _NOTE: When taking screenshots ensure NOT to copy your Astra DB secrets!_ 26 | 2. Submit the practice [here](https://dtsx.io/nosql-ws-hw), answering a few "theory" questions and also attaching the screenshots. 27 | 28 | 29 | ## Practice 30 | 31 | 1. [Login or Register to AstraDB and create database](#1-login-or-register-to-astradb-and-create-database) 32 | 2. [Tabular Databases](#2-tabular-databases) 33 | 3. [Document Databases](#3-document-databases) 34 | 4. [Key-Value Databases](#4-keyvalue-databases) 35 | 5. [Graph Databases](#5-graph-databases) 36 | 37 | ## 1. Login or Register to AstraDB and create database 38 | 39 | **`ASTRADB`** is the simplest way to run Cassandra with zero operations at all - just push the button and get your cluster. No credit card required, 40 | a monthly free credit to use, covering about 20M reads/writes and 80GB storage (sufficient to run small production workloads), all for FREE. 41 | 42 | ### ✅ 1a. Register a free account on Astra 43 | 44 | Click the button below to login or register on DataStax Astra DB. You can use your `Github`, `Google` accounts or register with an `email`. 45 | 46 | 47 | 48 | **Use the following values when creating the database** (this makes your life easier further on): 49 | 50 | |Field| Value| 51 | |---|---| 52 | |**database name**| `workshops` | 53 | |**keyspace**| `nosql1` | 54 | |**Cloud Provider**| Stick to GCP and then pick an "unlocked" region to start immediately | 55 | 56 | More info on account creation [here](https://awesome-astra.github.io/docs/pages/astra/create-account/). 57 | 58 | You will see your new database as `pending` or `initializing` on the Dashboard. 59 | The status will then change to `Active` when the database is ready: this will only take 2-3 minutes. 60 | At that point you will also receive a confirmation email. 61 | 62 | ## 2. Tabular databases 63 | 64 | In a tabular database we will store ... tables! The Astra DB Service is built on Apache Cassandra™, which is tabular. Let's start with this. 65 | 66 | > **Tabular databases** organize data in rows and columns, but with a twist from the traditional RDBMS. Also known as wide-column stores or partitioned row stores, they provide the option to organize related rows in partitions that are stored together on the same replicas to allow fast queries. Unlike RDBMSs, the tabular format is not necessarily strict. For example, Apache Cassandra™ does not require all rows to contain values for all columns in the table. Like Key/Value and Document databases, Tabular databases use hashing to retrieve rows from the table. Examples include: Cassandra, HBase, and Google Bigtable. 67 | 68 | ### ✅ 2a. Describe your Keyspace 69 | 70 | At database creation you provided a keyspace, a logical grouping for tables. 71 | Let's visualize it. 72 | In Astra DB go to CQL Console to enter the following commands 73 | 74 | #### Select your db 75 | 76 | ![image](images/01.png?raw=true) 77 | 78 | #### Go to the Cql Console 79 | ![image](images/02.png?raw=true) 80 | 81 | #### Enter the describe command 82 | 83 | ... and press Enter: 84 | 85 | ```sql 86 | DESCRIBE KEYSPACES; 87 | ``` 88 | 89 | ![image](images/03.png?raw=true) 90 | 91 | ### ✅ 2b. Create table 92 | 93 | #### Table creation 94 | 95 | Execute the following Cassandra Query Language commands 96 | 97 | ```sql 98 | USE nosql1; 99 | 100 | CREATE TABLE IF NOT EXISTS accounts_by_user ( 101 | user_id UUID, 102 | account_id UUID, 103 | account_type TEXT, 104 | account_balance DECIMAL, 105 | user_name TEXT STATIC, 106 | user_email TEXT STATIC, 107 | PRIMARY KEY ( (user_id), account_id) 108 | ) WITH CLUSTERING ORDER BY (account_id ASC); 109 | ``` 110 | 111 | #### Check 112 | 113 | Check keyspace contents and structure: 114 | 115 | ```sql 116 | DESCRIBE KEYSPACE nosql1; 117 | ``` 118 | 119 | _👁️ Expected output_ 120 | 121 | ``` 122 | CREATE KEYSPACE nosql1 WITH replication = {'class': 'NetworkTopologyStrategy', 'eu-central-1': '3'} AND durable_writes = true; 123 | 124 | CREATE TABLE nosql1.accounts_by_user ( 125 | user_id uuid, 126 | account_id uuid, 127 | account_balance decimal, 128 | account_type text, 129 | user_email text static, 130 | user_name text static, 131 | PRIMARY KEY (user_id, account_id) 132 | ) WITH CLUSTERING ORDER BY (account_id ASC) 133 | AND additional_write_policy = '99PERCENTILE' 134 | AND bloom_filter_fp_chance = 0.01 135 | AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} 136 | AND comment = '' 137 | AND compaction = {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy'} 138 | AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} 139 | AND crc_check_chance = 1.0 140 | AND default_time_to_live = 0 141 | AND gc_grace_seconds = 864000 142 | AND max_index_interval = 2048 143 | AND memtable_flush_period_in_ms = 0 144 | AND min_index_interval = 128 145 | AND read_repair = 'BLOCKING' 146 | AND speculative_retry = '99PERCENTILE'; 147 | ``` 148 | 149 | ### ✅ 2c. Working with DATA 150 | 151 | #### Insert some entries into the table 152 | 153 | ```sql 154 | INSERT INTO accounts_by_user(user_id, account_id, account_balance, account_type, user_email, user_name) 155 | VALUES( 156 | 1cafb6a4-396c-4da1-8180-83531b6a41e3, 157 | 811b56c3-cead-40d9-9a3d-e230dcd64f2f, 158 | 1500, 159 | 'Savings', 160 | 'alice@example.org', 161 | 'Alice' 162 | ); 163 | 164 | INSERT INTO accounts_by_user(user_id, account_id, account_balance, account_type) 165 | VALUES( 166 | 1cafb6a4-396c-4da1-8180-83531b6a41e3, 167 | 83428a85-5c8f-4398-8019-918d6e1d3a93, 168 | 2500, 169 | 'Checking' 170 | ); 171 | 172 | INSERT INTO accounts_by_user(user_id, account_id, account_balance, account_type, user_email, user_name) 173 | VALUES( 174 | 0d2b2319-9c0b-4ecb-8953-98687f6a99ce, 175 | 81def5e2-84f4-4885-a920-1c14d2be3c20, 176 | 1000, 177 | 'Checking', 178 | 'bob@example.org', 179 | 'Bob' 180 | ); 181 | ``` 182 | 183 | #### Read values 184 | 185 | ```sql 186 | SELECT * FROM accounts_by_user; 187 | ``` 188 | 189 | > Such a full-table query is strongly discouraged in most distributed databases 190 | > as it involves contacting many nodes to assemble the whole result dataset: 191 | > here we are using it for learning purposes, not in production and on a table 192 | > with very few rows! 193 | 194 | _👁️ Expected output_ 195 | 196 | ``` 197 | user_id | account_id | user_email | user_name | account_balance | account_type 198 | --------------------------------------+--------------------------------------+-------------------+-----------+-----------------+-------------- 199 | 0d2b2319-9c0b-4ecb-8953-98687f6a99ce | 81def5e2-84f4-4885-a920-1c14d2be3c20 | bob@example.org | Bob | 1000 | Checking 200 | 1cafb6a4-396c-4da1-8180-83531b6a41e3 | 811b56c3-cead-40d9-9a3d-e230dcd64f2f | alice@example.org | Alice | 1500 | Savings 201 | 1cafb6a4-396c-4da1-8180-83531b6a41e3 | 83428a85-5c8f-4398-8019-918d6e1d3a93 | alice@example.org | Alice | 2500 | Checking 202 | 203 | (3 rows) 204 | ``` 205 | 206 | > Notice that all three rows are "filled with data", despite the second of the insertions above skipping the `user_email` and `user_name` columns: 207 | > this is because these are **static columns** (i.e. associated to the whole partition) and their value had been written already in the first insertion. 208 | 209 | #### Read by primary key 210 | 211 | ```sql 212 | SELECT user_email, account_type, account_balance 213 | FROM accounts_by_user 214 | WHERE user_id=0d2b2319-9c0b-4ecb-8953-98687f6a99ce 215 | AND account_id=81def5e2-84f4-4885-a920-1c14d2be3c20; 216 | ``` 217 | 218 | _👁️ Expected output_ 219 | 220 | ``` 221 | user_email | account_type | account_balance 222 | -----------------+--------------+----------------- 223 | bob@example.org | Checking | 1000 224 | 225 | (1 rows) 226 | ``` 227 | 228 | ### ✅ 2d. Working with PARTITIONS 229 | 230 | But data can be grouped, we stored together what should be retrieved together. 231 | 232 | #### Try a query not compatible with the data model 233 | 234 |
(Optional: click to expand) 235 | 236 | ``` 237 | SELECT account_id, account_type, account_balance 238 | FROM accounts_by_user 239 | WHERE account_id=81def5e2-84f4-4885-a920-1c14d2be3c20; 240 | ``` 241 | 242 | 246 | 247 | **`Yes, we know`**, and now let's see why. 248 | 249 | ``` 250 | TRACING ON; 251 | SELECT account_id, account_type, account_balance 252 | FROM accounts_by_user 253 | WHERE account_id=81def5e2-84f4-4885-a920-1c14d2be3c20 254 | ALLOW FILTERING; 255 | TRACING OFF; 256 | ``` 257 | 258 | > _Note_: `ALLOW FILTERING` is almost never to be used in production, we use it here to see what happens! 259 | 260 | _👁️ Output_ 261 | 262 | ``` 263 | account_id | account_type | account_balance 264 | --------------------------------------+--------------+----------------- 265 | 81def5e2-84f4-4885-a920-1c14d2be3c20 | Checking | 1000 266 | 267 | (1 rows) 268 | ``` 269 | 270 | But also (_"Anatomy of a full-cluster scan"_): 271 | 272 | ``` 273 | Tracing session: e97b98b0-d146-11ec-a4e5-19251c2b96e1 274 | 275 | activity | timestamp | source | source_elapsed | client 276 | ----------------------------------------------------------------------------------------------------------------------------+----------------------------+-------------+----------------+----------------------------------------- 277 | Execute CQL3 query | 2022-05-11 16:25:03.675000 | 10.0.63.218 | 0 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 278 | Parsing SELECT[....]_by_user\n WHERE account_id=81def5e2-84f4-4885-a920-1c14d2be3c20\n ALLOW FILTERING; [CoreThread-0] | 2022-05-11 16:25:03.676000 | 10.0.63.218 | 229 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 279 | Preparing statement [CoreThread-0] | 2022-05-11 16:25:03.676000 | 10.0.63.218 | 445 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 280 | Computing ranges to query... [CoreThread-0] | 2022-05-11 16:25:03.681000 | 10.0.63.218 | 5970 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 281 | READS.RANGE_READ message received from /10.0.63.218 [CoreThread-9] | 2022-05-11 16:25:03.682000 | 10.0.31.189 | -- | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 282 | Submitting range requests on 25 ranges with a concurrency of 1 (0.0 rows per range expected) [CoreThread-0] | 2022-05-11 16:25:03.682000 | 10.0.63.218 | 6197 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 283 | Submitted 1 concurrent range requests [CoreThread-0] | 2022-05-11 16:25:03.682000 | 10.0.63.218 | 6312 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 284 | Sending READS.RANGE_READ message to /10.0.32.75, size=227 bytes [CoreThread-9] | 2022-05-11 16:25:03.682000 | 10.0.63.218 | 6436 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 285 | Sending READS.RANGE_READ message to /10.0.31.189, size=227 bytes [CoreThread-8] | 2022-05-11 16:25:03.682000 | 10.0.63.218 | 6436 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 286 | READS.RANGE_READ message received from /10.0.63.218 [CoreThread-4] | 2022-05-11 16:25:03.683000 | 10.0.32.75 | -- | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 287 | Executing seq scan across 0 sstables for (min(-9223372036854775808), min(-9223372036854775808)] [CoreThread-4] | 2022-05-11 16:25:03.683000 | 10.0.32.75 | 444 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 288 | Executing seq scan across 0 sstables for (min(-9223372036854775808), min(-9223372036854775808)] [CoreThread-9] | 2022-05-11 16:25:03.684000 | 10.0.31.189 | 356 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 289 | Read 1 live rows and 0 tombstone ones [CoreThread-4] | 2022-05-11 16:25:03.684000 | 10.0.32.75 | 789 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 290 | Read 1 live rows and 0 tombstone ones [CoreThread-9] | 2022-05-11 16:25:03.684000 | 10.0.31.189 | 731 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 291 | Enqueuing READS.RANGE_READ response to /10.0.32.75 [CoreThread-4] | 2022-05-11 16:25:03.684000 | 10.0.32.75 | 897 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 292 | Enqueuing READS.RANGE_READ response to /10.0.31.189 [CoreThread-9] | 2022-05-11 16:25:03.684000 | 10.0.31.189 | 731 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 293 | Sending READS.RANGE_READ message to /10.0.63.218, size=212 bytes [CoreThread-7] | 2022-05-11 16:25:03.684000 | 10.0.32.75 | 954 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 294 | Sending READS.RANGE_READ message to /10.0.63.218, size=212 bytes [CoreThread-1] | 2022-05-11 16:25:03.684000 | 10.0.31.189 | 1098 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 295 | READS.RANGE_READ message received from /10.0.32.75 [CoreThread-9] | 2022-05-11 16:25:03.685000 | 10.0.63.218 | 9626 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 296 | READS.RANGE_READ message received from /10.0.31.189 [CoreThread-1] | 2022-05-11 16:25:03.702000 | 10.0.63.218 | 27526 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 297 | Processing response from /10.0.32.75 [CoreThread-0] | 2022-05-11 16:25:03.856000 | 10.0.63.218 | 181075 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 298 | Processing response from /10.0.31.189 [CoreThread-0] | 2022-05-11 16:25:03.856000 | 10.0.63.218 | 181193 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 299 | Didn't get enough response rows; actual rows per range: 0.04; remaining rows: 99, new concurrent requests: 1 [CoreThread-0] | 2022-05-11 16:25:03.856000 | 10.0.63.218 | 181384 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 300 | Request complete | 2022-05-11 16:25:03.856560 | 10.0.63.218 | 181560 | 2898:d2d9:30d9:4a4f:acec:3e3a:3a76:4a7b 301 | ``` 302 | 303 |
304 | 305 | #### Retrieve data from a whole partition 306 | 307 | ```sql 308 | SELECT account_id, account_type, account_balance 309 | FROM accounts_by_user 310 | WHERE user_id=1cafb6a4-396c-4da1-8180-83531b6a41e3; 311 | ``` 312 | 313 | _👁️ Expected output_ 314 | 315 | ``` 316 | account_id | account_type | account_balance 317 | --------------------------------------+--------------+----------------- 318 | 811b56c3-cead-40d9-9a3d-e230dcd64f2f | Savings | 1500 319 | 83428a85-5c8f-4398-8019-918d6e1d3a93 | Checking | 2500 320 | 321 | (2 rows) 322 | ``` 323 | 324 | [🏠 Back to Table of Contents](#table-of-content) 325 | 326 | ## 3. Document Databases 327 | 328 | Let's do some hands-on with document database queries. 329 | 330 | > **Document databases** expand on the basic idea of key-value stores where “documents” are more complex, in that they contain data and each document is assigned a unique key, which is used to retrieve the document. These are designed for storing, retrieving, and managing document-oriented information, often stored as JSON. Since the Document database can inspect the document contents, the database can perform some additional retrieval processing. Unlike RDBMSs which require a static schema, Document databases have a flexible schema as defined by the document contents. Examples include: MongoDB and CouchDB. Note that some RDBMS and NoSQL databases outside of pure document stores are able to store and query JSON documents, including Cassandra. 331 | 332 | ### ✅ 3a. Cassandra native JSON support 333 | 334 | It is not widely known, but Cassandra accepts JSON queries out of the box. You can find more information [here](https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/useInsertJSON.html). 335 | 336 |
Show native JSON support 337 | 338 | #### JSON syntax for insertions 339 | 340 | Insert data into Cassandra with JSON syntax: 341 | 342 | ```sql 343 | INSERT INTO accounts_by_user JSON '{ 344 | "user_id": "1cafb6a4-396c-4da1-8180-83531b6a41e3", 345 | "account_id": "811b56c3-cead-40d9-9a3d-e230dcd64f2f", 346 | "user_email": "alice@example.org", 347 | "user_name": "Alice", 348 | "account_type": "Savings", 349 | "account_balance": "8500" 350 | }' ; 351 | ``` 352 | 353 | > Warning: missing fields in the provided JSON will entail explicit insertion of corresponding `null` values. 354 | 355 | #### JSON output when querying 356 | 357 | In the same way you can retrieve JSON out of Cassandra ([more info here](https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/useQueryJSON.html)). 358 | 359 | ```sql 360 | SELECT JSON account_type, account_balance 361 | FROM accounts_by_user 362 | WHERE user_id=1cafb6a4-396c-4da1-8180-83531b6a41e3; 363 | ``` 364 | 365 | _👁️ Output_ 366 | 367 | ``` 368 | [json] 369 | ------------------------------------------------------- 370 | {"account_type": "Savings", "account_balance": 8500} 371 | {"account_type": "Checking", "account_balance": 2500} 372 | 373 | (2 rows) 374 | ``` 375 | 376 | This JSON support is but a wrapper around access to the same fixed-schema 377 | tables seen in the previous section ("Tabular"). 378 | 379 |
380 | 381 | ### ✅ 3b. Create a token and open Swagger 382 | 383 | We now turn to using Astra DB's Document API. 384 | 385 | #### Token creation 386 | 387 | To do so, first you need to create an Astra DB token, which will 388 | be used for authentication to your database. 389 | 390 | **Create a token with "Database Administrator" privileges following 391 | the instructions here: [Create an Astra DB token](https://awesome-astra.github.io/docs/pages/astra/create-token/#c-procedure).** 392 | (See also [the official docs on tokens](https://docs.datastax.com/en/astra/docs/manage-application-tokens.html).) 393 | 394 | Keep the "token" ready to use (it is the long string starting with `AstraCS:.....`). 395 | 396 | > **⚠️ Important** 397 | > ``` 398 | > The instructor will show you on screen how to create a token 399 | > but will have to destroy to token immediately for security reasons. 400 | > ``` 401 | 402 | #### Swagger UI 403 | 404 | The Document API can be easily accessed through a Swagger UI: 405 | go the "Connect" page, stay in the "Document API" subpage, and locate the URL under the "Launching Swagger UI" heading: 406 | 407 | ![image](images/connect.png?raw=true) 408 | 409 | Locate the "documents" section in the Swagger UI. You are now ready to fire requests to the Document API. 410 | 411 | ![image](images/05.png?raw=true) 412 | 413 | ### ✅ 3c. Create a new empty collection 414 | 415 | ![Swagger 3c](images/swagger/swagger_3c.png) 416 | 417 | - Access ***Create a new empty collection in a namespace*** 418 | - Click `Try it out` button 419 | - Fill Header `X-Cassandra-Token` with `` 420 | - For `namespace-id` use `nosql1` 421 | - For `body` use 422 | 423 | ```json 424 | { "name": "users" } 425 | ``` 426 | - Click the `Execute` button 427 | 428 | You will get an `HTTP 201 - Created` return code. 429 | 430 | > _Note:_ the response you just got from actually calling the API endpoint 431 | > is given under the "Server response" heading. Do not confuse it with 432 | > the "Responses" found immediately after, which are simply a documentation 433 | > of all possible response codes (and the return object they quote are static 434 | > example JSONs). 435 | 436 |
Click to show a screenshot 437 | 438 | ![image](images/swagger_responses_annotated.png?raw=true) 439 | 440 |
441 | 442 | ### ✅ 3d. Create new documents 443 | 444 | #### Add a first document 445 | 446 | ![Swagger 3d](images/swagger/swagger_3d.png) 447 | 448 | - Access ***Create a new document*** 449 | - Click `Try it out` button 450 | - Fill with Header `X-Cassandra-Token` with `AstraCS:...[your_token]...` 451 | - For `namespace-id` use `nosql1` 452 | - For `collection-id` use `users` 453 | - For `body` use 454 | 455 | ```json 456 | { 457 | "accounts": [ 458 | { 459 | "balance": "1000", 460 | "id": "81def5e2-84f4-4885-a920-1c14d2be3c20", 461 | "type": "Checking" 462 | } 463 | ], 464 | "email": "bob@example.org", 465 | "id": "0d2b2319-9c0b-4ecb-8953-98687f6a99ce", 466 | "name": "Bob" 467 | } 468 | ``` 469 | - Click the `Execute` button 470 | 471 | _👁️ Expected output (your `documentId` will be different)_ 472 | 473 | ```json 474 | { 475 | "documentId": "137d8609-87f6-4cb7-9506-e52f338e79e9" 476 | } 477 | ``` 478 | 479 | #### Add another document 480 | 481 | Repeat with the following body, which has _a different structure_: 482 | 483 | ```json 484 | { 485 | "accounts": [ 486 | { 487 | "balance": "2500", 488 | "id": "83428a85-5c8f-4398-8019-918d6e1d3a93", 489 | "type": "Checking" 490 | }, 491 | { 492 | "balance": "1500", 493 | "id": "811b56c3-cead-40d9-9a3d-e230dcd64f2f", 494 | "type": "Savings" 495 | } 496 | ], 497 | "email": "alice@example.org", 498 | "id": "1cafb6a4-396c-4da1-8180-83531b6a41e3", 499 | "name": "Alice" 500 | } 501 | ``` 502 | 503 | As before, the document will automatically be given an internal unique `documentId`. 504 | 505 | 506 | ### ✅ 3e. Retrieve a document by its ID 507 | 508 | ![Swagger 3e](images/swagger/swagger_3eB.png) 509 | 510 | - Access ***Get a document*** 511 | - Click `Try it out` button 512 | - Fill Header `X-Cassandra-Token` with `` 513 | - For `namespace-id` use `nosql1` 514 | - For `collection-id` use `users` 515 | - For `document-id` use Bob's `documentId` (e.g. `137d8609-87f6-4cb7-9506-e52f338e79e9` in the above sample output) 516 | - Click the `Execute` button 517 | 518 | _👁️ Expected output_ 519 | 520 | ```json 521 | { 522 | "documentId": "137d8609-87f6-4cb7-9506-e52f338e79e9", 523 | "data": { 524 | "accounts": [ 525 | { 526 | "balance": "1000", 527 | "id": "81def5e2-84f4-4885-a920-1c14d2be3c20", 528 | "type": "Checking" 529 | } 530 | ], 531 | "email": "bob@example.org", 532 | "id": "0d2b2319-9c0b-4ecb-8953-98687f6a99ce", 533 | "name": "Bob" 534 | } 535 | } 536 | ``` 537 | 538 | 539 | ### ✅ 3f. Find all documents in a collection 540 | 541 | ![Swagger 3f](images/swagger/swagger_3fB.png) 542 | 543 | - Access ***Search documents in a collection*** 544 | - Click `Try it out` button 545 | - Fill Header `X-Cassandra-Token` with `` 546 | - For `namespace-id` use `nosql1` 547 | - For `collection-id` use `users` 548 | 549 | Leave other fields blank (in particular, every query is paged in Cassandra). 550 | 551 | - Click the `Execute` button 552 | 553 | _👁️ Expected output (take note of the `documentId`s of your output for later)_ 554 | 555 | ```json 556 | { 557 | "data": { 558 | "6d0aafd9-3c2c-461f-92c6-08322eaef5da": { 559 | "accounts": [ 560 | { 561 | "balance": "2500", 562 | "id": "83428a85-5c8f-4398-8019-918d6e1d3a93", 563 | "type": "Checking" 564 | }, 565 | { 566 | "balance": "1500", 567 | "id": "811b56c3-cead-40d9-9a3d-e230dcd64f2f", 568 | "type": "Savings" 569 | } 570 | ], 571 | "email": "alice@example.org", 572 | "id": "1cafb6a4-396c-4da1-8180-83531b6a41e3", 573 | "name": "Alice" 574 | }, 575 | "137d8609-87f6-4cb7-9506-e52f338e79e9": { 576 | "accounts": [ 577 | { 578 | "balance": "1000", 579 | "id": "81def5e2-84f4-4885-a920-1c14d2be3c20", 580 | "type": "Checking" 581 | } 582 | ], 583 | "email": "bob@example.org", 584 | "id": "0d2b2319-9c0b-4ecb-8953-98687f6a99ce", 585 | "name": "Bob" 586 | } 587 | } 588 | } 589 | ``` 590 | 591 | 592 | ### ✅ 3g. Search document with a "where" clause 593 | 594 | The endpoint you just used can support [`where` clauses](https://docs.datastax.com/en/astra/docs/read-documents.html#_retrieving_a_document_using_a_where_clause) as well, 595 | expressed as JSON. You don't need to navigate away from it do try the 596 | following: 597 | 598 | ![Swagger 3g](images/swagger/swagger_3g.png) 599 | 600 | - Access ***Search documents in a collection*** (you should be there already) 601 | - Click `Try it out` button 602 | - Fill Header `X-Cassandra-Token` with `` 603 | - For `namespace-id` use `nosql1` 604 | - For `collection-id` use `users` 605 | - For `where` use `{"name": {"$eq": "Alice"}}` 606 | - Click the `Execute` button 607 | 608 | *👁️ Expected output* 609 | 610 | ```json 611 | { 612 | "data": { 613 | "6d0aafd9-3c2c-461f-92c6-08322eaef5da": { 614 | "accounts": [ 615 | { 616 | "balance": "2500", 617 | "id": "83428a85-5c8f-4398-8019-918d6e1d3a93", 618 | "type": "Checking" 619 | }, 620 | { 621 | "balance": "1500", 622 | "id": "811b56c3-cead-40d9-9a3d-e230dcd64f2f", 623 | "type": "Savings" 624 | } 625 | ], 626 | "email": "alice@example.org", 627 | "id": "1cafb6a4-396c-4da1-8180-83531b6a41e3", 628 | "name": "Alice" 629 | } 630 | } 631 | } 632 | ``` 633 | 634 | [🏠 Back to Table of Contents](#table-of-content) 635 | 636 | ## 4. Key/Value Databases 637 | 638 | > **Key/Value databases** are some of the simplest and yet powerful as all of the data within consists of an indexed key and a value. Key-value databases use a hashing mechanism, so that that given a key, the database can quickly retrieve the associated value. Hashing mechanisms provide constant time access, which means they maintain high performance even at large scale. The keys can be any type of object, but are typically a string. The values are generally opaque blobs (i.e. a sequence of bytes that the database does not interpret). Examples include: Redis, Amazon DynamoDB, Riak, and Oracle NoSQL database. Some tabular NoSQL databases, like Cassandra, can also service key/value needs. 639 | 640 | ### ✅ 4a. Create a table for Key/Value 641 | 642 | Go to the CQL Console again and issue the following commands 643 | to create a new, simple table with just two columns: 644 | 645 | ```sql 646 | USE nosql1; 647 | 648 | CREATE TABLE users_kv ( 649 | key TEXT PRIMARY KEY, 650 | value TEXT 651 | ); 652 | ``` 653 | 654 | ### ✅ 4b. Populate the table 655 | 656 | Insert into the table all the following entries. 657 | Note that all inserted values, regardless of their "true" data type, 658 | have been coerced into strings according to the table schema. 659 | Also note how the keys are structured and how some entries reference other, 660 | effectively creating a set of interconnected pieces of information on the users: 661 | 662 | ```sql 663 | INSERT INTO users_kv (key, value) VALUES ('user:1cafb6a4-396c-4da1-8180-83531b6a41e3:name', 'Alice'); 664 | INSERT INTO users_kv (key, value) VALUES ('user:1cafb6a4-396c-4da1-8180-83531b6a41e3:email', 'alice@example.org'); 665 | INSERT INTO users_kv (key, value) VALUES ('user:1cafb6a4-396c-4da1-8180-83531b6a41e3:accounts', '{83428a85-5c8f-4398-8019-918d6e1d3a93, 811b56c3-cead-40d9-9a3d-e230dcd64f2f}'); 666 | 667 | INSERT INTO users_kv (key, value) VALUES ('user:0d2b2319-9c0b-4ecb-8953-98687f6a99ce:name', 'Bob'); 668 | INSERT INTO users_kv (key, value) VALUES ('user:0d2b2319-9c0b-4ecb-8953-98687f6a99ce:email', 'bob@example.org'); 669 | INSERT INTO users_kv (key, value) VALUES ('user:0d2b2319-9c0b-4ecb-8953-98687f6a99ce:accounts', '{81def5e2-84f4-4885-a920-1c14d2be3c20}'); 670 | 671 | INSERT INTO users_kv (key, value) VALUES ('account:83428a85-5c8f-4398-8019-918d6e1d3a93:type', 'Checking'); 672 | INSERT INTO users_kv (key, value) VALUES ('account:83428a85-5c8f-4398-8019-918d6e1d3a93:balance', '2500'); 673 | 674 | INSERT INTO users_kv (key, value) VALUES ('account:811b56c3-cead-40d9-9a3d-e230dcd64f2f:type', 'Savings'); 675 | INSERT INTO users_kv (key, value) VALUES ('account:811b56c3-cead-40d9-9a3d-e230dcd64f2f:balance', '1500'); 676 | 677 | INSERT INTO users_kv (key, value) VALUES ('account:81def5e2-84f4-4885-a920-1c14d2be3c20:type', 'Checking'); 678 | INSERT INTO users_kv (key, value) VALUES ('account:81def5e2-84f4-4885-a920-1c14d2be3c20:balance', '1000'); 679 | ``` 680 | 681 | ### ✅ 4c. Update a value 682 | 683 | You can imagine an application "navigating the keys" (e.g, from an user to an account) for instance 684 | when it must update a balance. The actual update would look like: 685 | 686 | ```sql 687 | INSERT INTO users_kv (key, value) VALUES ('account:81def5e2-84f4-4885-a920-1c14d2be3c20:balance', '9000'); 688 | ``` 689 | 690 | Let's check: 691 | 692 | ```sql 693 | SELECT * FROM users_kv WHERE key = 'account:81def5e2-84f4-4885-a920-1c14d2be3c20:balance'; 694 | ``` 695 | 696 | *👁️ Expected output* 697 | 698 | ``` 699 | key | value 700 | ------------------------------------------------------+------- 701 | account:81def5e2-84f4-4885-a920-1c14d2be3c20:balance | 9000 702 | 703 | (1 rows) 704 | ``` 705 | 706 | #### Alternative update syntax 707 | 708 | The same result is obtained with 709 | 710 | ```sql 711 | UPDATE users_kv SET value = '-500' WHERE key = 'account:81def5e2-84f4-4885-a920-1c14d2be3c20:balance'; 712 | ``` 713 | 714 | indeed, in most key-value data stores, inserting and updating are one and the same operation 715 | since the main goal is usually the highest performance (hence, row-existence checks are skipped altogether). 716 | 717 | Thus, writing entries with the key of a pre-existing entry will simply overwrite the less recent values, 718 | enabling a very efficient and simple deduplication strategy. 719 | 720 | Check once more what's in the table: 721 | 722 | ```sql 723 | SELECT * FROM users_kv ; 724 | ``` 725 | 726 | *👁️ Expected output* 727 | 728 | 729 | ``` 730 | key | value 731 | ------------------------------------------------------+------------------------------------------------------------------------------ 732 | account:81def5e2-84f4-4885-a920-1c14d2be3c20:balance | -500 733 | user:0d2b2319-9c0b-4ecb-8953-98687f6a99ce:accounts | {81def5e2-84f4-4885-a920-1c14d2be3c20} 734 | account:811b56c3-cead-40d9-9a3d-e230dcd64f2f:balance | 1500 735 | user:1cafb6a4-396c-4da1-8180-83531b6a41e3:accounts | {83428a85-5c8f-4398-8019-918d6e1d3a93, 811b56c3-cead-40d9-9a3d-e230dcd64f2f} 736 | user:1cafb6a4-396c-4da1-8180-83531b6a41e3:email | alice@example.org 737 | user:1cafb6a4-396c-4da1-8180-83531b6a41e3:name | Alice 738 | user:0d2b2319-9c0b-4ecb-8953-98687f6a99ce:name | Bob 739 | user:0d2b2319-9c0b-4ecb-8953-98687f6a99ce:email | bob@example.org 740 | account:83428a85-5c8f-4398-8019-918d6e1d3a93:type | Checking 741 | account:811b56c3-cead-40d9-9a3d-e230dcd64f2f:type | Savings 742 | account:81def5e2-84f4-4885-a920-1c14d2be3c20:type | Checking 743 | account:83428a85-5c8f-4398-8019-918d6e1d3a93:balance | 2500 744 | 745 | (12 rows) 746 | ``` 747 | 748 | [🏠 Back to Table of Contents](#table-of-content) 749 | 750 | ## 5. Graph Databases 751 | 752 | > **Graph databases** store their data using a graph metaphor to exploit the relationships between data. Nodes in the graph represent data items, and edges represent the relationships between the data items. Graph databases are designed for highly complex and connected data, which outpaces the relationship and JOIN capabilities of an RDBMS. Graph databases are often exceptionally good at finding commonalities and anomalies among large data sets. Examples of Graph databases include DataStax Graph, Neo4J, JanusGraph, and Amazon Neptune. 753 | 754 | Astra DB does not contain yet a way to implement Graph Databases use cases. But at Datastax we do have a product called [DataStax Graph](https://www.datastax.com/products/datastax-graph) that you can use for free when not in production. 755 | 756 | For graph databases, the presenter will show a demo based on the example in the slides. 757 | 758 | The hands-on practice for you is different. But since it cannot be done in the browser using 759 | Astra DB like the rest, it is kept separate and not included in today's curriculum. 760 | 761 | 🔥 Yet, you are strongly encouraged to try it at your own pace, on your own computer, 762 | by following the instructions given here: [Graph Databases Practice](graph_databases.md). 🔥 763 | 764 | > Try it out, it's super cool! 765 | 766 | ## THE END 767 | 768 | Congratulations! You made it to the END. 769 | 770 | See you next time! 771 | 772 | [🏠 Back to Table of Contents](#table-of-content) 773 | -------------------------------------------------------------------------------- /astra.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Introduction to NoSQL Workshop", 3 | "description": "An introduction to NoSQL Databases", 4 | "skillLevel": "Beginner", 5 | "language":[], 6 | "stack":[], 7 | "heroImage": "https://github.com/datastaxdevs/workshop-introduction-to-nosql/raw/main/images/intro-to-nosql-cover.png?raw=true", 8 | "githubUrl": "https://github.com/datastaxdevs/workshop-introduction-to-nosql", 9 | "youTubeUrl": [ "https://www.youtube.com/watch?v=rhzUrejsA4A"], 10 | "tags": [ 11 | { "name": "nosql" } 12 | ], 13 | "category": "workshop", 14 | "usecases": [] 15 | } 16 | -------------------------------------------------------------------------------- /datastax-studio-config/clientid: -------------------------------------------------------------------------------- 1 | 3db34644-3d23-4b42-a0c9-4b0ff00433cb -------------------------------------------------------------------------------- /datastax-studio-config/connections/admin/.418ed742-cd61-4df8-abd8-07bc56a62e8d.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/connections/admin/.418ed742-cd61-4df8-abd8-07bc56a62e8d.example -------------------------------------------------------------------------------- /datastax-studio-config/connections/admin/418ed742-cd61-4df8-abd8-07bc56a62e8d: -------------------------------------------------------------------------------- 1 | json_connection_configuration_v1{"1":"418ed742-cd61-4df8-abd8-07bc56a62e8d","10":"default localhost","11":9042,"12":["dse"],"15":2,"17":{"10":"","11":""},"18":{"10":"","11":""},"19":{"1":{"1":[{"1":"STUDIO_TUTORIAL_GRAPH","2":{"2":{"1":[{"1":"god","2":"mercury"},{"1":"titan","2":"male"},{"1":"monster","2":"optin-monster"},{"1":"human","2":"user-circle"},{"1":"location","2":"home"},{"1":"demigod","2":"mars-stroke-v"}]}}}]}},"20":{}} -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/000010.sst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/eventlogs/log-studio/000010.sst -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/000012.sst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/eventlogs/log-studio/000012.sst -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/000014.sst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/eventlogs/log-studio/000014.sst -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/000015.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/eventlogs/log-studio/000015.log -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/CURRENT: -------------------------------------------------------------------------------- 1 | MANIFEST-000013 2 | -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/LOCK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/eventlogs/log-studio/LOCK -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/LOG: -------------------------------------------------------------------------------- 1 | 2021/04/01-08:50:37.375920 7fdc76afc700 Recovering log #11 2 | 2021/04/01-08:50:37.412912 7fdc76afc700 Level-0 table #14: started 3 | 2021/04/01-08:50:37.510904 7fdc76afc700 Level-0 table #14: 89303 bytes OK 4 | 2021/04/01-08:50:37.648421 7fdc76afc700 Delete type=0 #11 5 | 2021/04/01-08:50:37.667481 7fdc76afc700 Delete type=3 #9 6 | -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/LOG.old: -------------------------------------------------------------------------------- 1 | 2021/03/31-17:53:33.275286 7fcc6bdfd700 Recovering log #8 2 | 2021/03/31-17:53:33.280933 7fcc6bdfd700 Level-0 table #10: started 3 | 2021/03/31-17:53:33.304582 7fcc6bdfd700 Level-0 table #10: 183 bytes OK 4 | 2021/03/31-17:53:33.398391 7fcc6bdfd700 Delete type=3 #6 5 | 2021/03/31-17:53:33.403554 7fcc6bdfd700 Delete type=0 #8 6 | 2021/03/31-18:02:01.415198 7fcbe734b700 Compacting 1@1 + 1@2 files 7 | 2021/03/31-18:02:01.447149 7fcbe734b700 Generated table #12: 42 keys, 62159 bytes 8 | 2021/03/31-18:02:01.447709 7fcbe734b700 Compacted 1@1 + 1@2 files => 62159 bytes 9 | 2021/03/31-18:02:01.450744 7fcbe734b700 compacted to: files[ 1 0 1 0 0 0 0 ] 10 | 2021/03/31-18:02:01.460583 7fcbe734b700 Delete type=2 #7 11 | 2021/03/31-18:02:01.466301 7fcbe734b700 Delete type=2 #5 12 | -------------------------------------------------------------------------------- /datastax-studio-config/eventlogs/log-studio/MANIFEST-000013: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/eventlogs/log-studio/MANIFEST-000013 -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/10_2021-03-31-17-56-44.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/10_2021-03-31-17-56-44.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/10_2021-03-31-17-56-44.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617213404,"2":0},"2":10,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/11_2021-03-31-18-01-57.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/11_2021-03-31-18-01-57.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/11_2021-03-31-18-01-57.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617213717,"2":0},"2":11,"5":[199,104]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/12_2021-04-01-08-54-41.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/12_2021-04-01-08-54-41.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/12_2021-04-01-08-54-41.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617267281,"2":0},"2":12,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/13_2021-04-01-08-55-09.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/13_2021-04-01-08-55-09.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/13_2021-04-01-08-55-09.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617267309,"2":0},"2":13,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/14_2021-04-01-08-55-37.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/14_2021-04-01-08-55-37.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/14_2021-04-01-08-55-37.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617267337,"2":0},"2":14,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/15_2021-04-01-09-00-40.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/15_2021-04-01-09-00-40.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/15_2021-04-01-09-00-40.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617267640,"2":0},"2":15,"5":[199,104]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/1_2021-03-31-08-36-27.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/1_2021-03-31-08-36-27.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/1_2021-03-31-08-36-27.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179787,"2":0},"2":1,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/2_2021-03-31-08-36-32.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/2_2021-03-31-08-36-32.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/2_2021-03-31-08-36-32.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179792,"2":0},"2":2,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/3_2021-03-31-08-36-34.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/3_2021-03-31-08-36-34.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/3_2021-03-31-08-36-34.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179794,"2":0},"2":3,"5":[200]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/4_2021-03-31-08-36-36.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/4_2021-03-31-08-36-36.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/4_2021-03-31-08-36-36.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179796,"2":0},"2":4,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/5_2021-03-31-08-36-40.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/5_2021-03-31-08-36-40.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/5_2021-03-31-08-36-40.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179800,"2":0},"2":5,"5":[201]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/6_2021-03-31-08-36-46.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/6_2021-03-31-08-36-46.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/6_2021-03-31-08-36-46.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179806,"2":0},"2":6,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/7_2021-03-31-08-36-48.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/7_2021-03-31-08-36-48.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/7_2021-03-31-08-36-48.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179808,"2":0},"2":7,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/8_2021-03-31-08-36-54.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/8_2021-03-31-08-36-54.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/8_2021-03-31-08-36-54.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179814,"2":0},"2":8,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/9_2021-03-31-08-36-58.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/9_2021-03-31-08-36-58.gz -------------------------------------------------------------------------------- /datastax-studio-config/history/d21c3230-8446-41ea-aea6-1e85a00411e0/9_2021-03-31-08-36-58.meta: -------------------------------------------------------------------------------- 1 | v1_history_metadata{"1":{"1":1617179818,"2":0},"2":9,"5":[106]} -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.13c69bd5-a215-4f1b-bb24-bb006f7740c6.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.13c69bd5-a215-4f1b-bb24-bb006f7740c6.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.577dbd0b-dcf6-496b-8a62-48b3678e776e.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.577dbd0b-dcf6-496b-8a62-48b3678e776e.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.636f7be7-3b99-4cab-9f91-bfba555612d7.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.636f7be7-3b99-4cab-9f91-bfba555612d7.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.733fab48-95dc-4eef-8ff0-c9952a86370a.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.733fab48-95dc-4eef-8ff0-c9952a86370a.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.ad4fb369-8941-456f-8436-23862120810d.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.ad4fb369-8941-456f-8436-23862120810d.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.d1e1386b-e6f4-4a9d-923a-64d8e54d1a3c.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.d1e1386b-e6f4-4a9d-923a-64d8e54d1a3c.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.d21c3230-8446-41ea-aea6-1e85a00411e0.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.d21c3230-8446-41ea-aea6-1e85a00411e0.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.da0b7dc3-1dd1-4027-bbef-4bf22e1506a4.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.da0b7dc3-1dd1-4027-bbef-4bf22e1506a4.example -------------------------------------------------------------------------------- /datastax-studio-config/marker_files/.fd853828-fa2d-4637-bd19-69879ef281c9.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/marker_files/.fd853828-fa2d-4637-bd19-69879ef281c9.example -------------------------------------------------------------------------------- /datastax-studio-config/snapshots/studio/d21c3230-8446-41ea-aea6-1e85a00411e0/snr-253: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/snapshots/studio/d21c3230-8446-41ea-aea6-1e85a00411e0/snr-253 -------------------------------------------------------------------------------- /datastax-studio-config/snapshots/studio/notebook_list/snr-253: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/snapshots/studio/notebook_list/snr-253 -------------------------------------------------------------------------------- /datastax-studio-config/snapshots/studio/settings/snr-253: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/datastax-studio-config/snapshots/studio/settings/snr-253 -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | networks: 4 | graph: 5 | external: true 6 | 7 | services: 8 | # ---------------------------------------- 9 | # DataStax Enterprise 10 | # ---------------------------------------- 11 | dse: 12 | image: datastax/dse-server:6.8.10 13 | command: [ -g ] 14 | ports: 15 | - "9042:9042" 16 | - "8983:8983" 17 | - "8182:8182" 18 | - "8183:8183" 19 | environment: 20 | - DS_LICENSE=accept 21 | - DC=DC1 22 | - JVM_EXTRA_OPTS=-Xmx1g -Xms1g 23 | - NUM_TOKENS=32 24 | cap_add: 25 | - IPC_LOCK 26 | ulimits: 27 | memlock: -1 28 | networks: 29 | - graph 30 | # Specify the container name explicitly to avoid getting underscores (see note above) 31 | container_name: dse 32 | 33 | # ---------------------------------------- 34 | # DataStax Studio 35 | # ---------------------------------------- 36 | studio: 37 | image: datastax/dse-studio:6.8.9 38 | ports: 39 | - "9091:9091" 40 | depends_on: 41 | - dse 42 | environment: 43 | DS_LICENSE: accept 44 | # for windows users - start studio image without volumes (remove the below 2 lines) 45 | volumes: 46 | - "./datastax-studio-config:/var/lib/datastax-studio" 47 | networks: 48 | - graph -------------------------------------------------------------------------------- /graph-demo/Introduction_to_NoSQL_2022-05-16_21_38_53.studio-nb.tar: -------------------------------------------------------------------------------- 1 | notebook.bin0100644 0000000 0000000 00000036745 14240542155 012140 0ustar000000000 0000000 json_notebook_v1{"1":"f0249807-b3c6-49d0-bccd-9db9be356773","10":"418ed742-cd61-4df8-abd8-07bc56a62e8d","11":"Introduction to NoSQL","12":{"1":1652724221,"2":15000000},"13":{"1":1652737108,"2":350000000},"14":false,"15":[{"1":"189bdc57-f7e9-4981-9738-8a0c370db9f1","10":4,"11":"**1**. Drop all schema definitions and data. ","12":"markdown","13":{"1":"da930a76-af5a-4436-b646-5c07791bb669","10":{"9":"

1. Drop all schema definitions and data.

\n"},"11":4,"12":false},"16":true,"17":true,"18":{},"25":"LOCAL.ONE"},{"1":"63da20c0-b56b-4aaf-8b01-f198d61b5db2","10":4,"11":"schema.drop()","12":"gremlin","13":{"1":"50f76ccf-fa88-4259-a70c-6eb03818c4e5","10":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"OK"}],"3":1},"11":12,"12":false,"14":1717},"16":true,"17":false,"25":"LOCAL.ONE"},{"1":"c66370ec-9253-4679-a2ba-13e7d855adab","10":4,"11":"**2**. Define the graph schema. Use the *DataStax Studio* schema view to explore the schema visually.","12":"markdown","13":{"1":"e3812d33-2940-4f78-a97c-1ecf38ddf664","10":{"9":"

2. Define the graph schema. Use the DataStax Studio schema view to explore the schema visually.

\n"},"11":4,"12":false},"16":true,"17":true,"18":{},"25":"LOCAL.ONE"},{"1":"b569644b-c31d-4981-987d-17d05f6644d9","10":4,"11":"// Define vertex labels\nschema.vertexLabel(\"user\").ifNotExists().\n partitionBy(\"id\",UUID).\n property(\"name\",Text).\n property(\"email\",Text).\n create()\nschema.vertexLabel(\"account\").ifNotExists().\n partitionBy(\"id\",UUID).\n property(\"type\",Text).\n property(\"balance\",Decimal).\n create()\n\n// Define edge labels\nschema.edgeLabel(\"has\").ifNotExists().\n from(\"user\").to(\"account\").\n create()\n\n// Define vertex indexes\nschema.vertexLabel('user').materializedView('user_by_name').ifNotExists().partitionBy('name').clusterBy('id', Asc).create()\nschema.vertexLabel('user').materializedView('user_by_email').ifNotExists().partitionBy('email').clusterBy('id', Asc).create()\n\n// Define edge indexes\nschema.edgeLabel('has').from('user').to('account').materializedView('account_has_user').ifNotExists().inverse().create()","12":"gremlin","13":{"1":"cb476ad5-7d9e-4ada-92d5-3bbb6a590ef3","10":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"OK"}],"3":1},"11":12,"12":false,"14":505},"15":9,"16":true,"17":false,"25":"LOCAL.ONE"},{"1":"807056dc-ec7c-44dd-8154-c2c357e645f8","10":4,"11":"**3**. Add 5 vertices and 3 edges.","12":"markdown","13":{"1":"77c73fe1-c679-41b8-ade2-32456bd6290c","10":{"9":"

3. Add 5 vertices and 3 edges.

\n"},"11":4,"12":false},"16":true,"17":true,"18":{},"25":"LOCAL.ONE"},{"1":"22bcda8d-5191-47d9-b6b8-3533e58d1949","10":4,"11":"g.addV(\"user\")\n .property(\"id\",UUID.fromString(\"1cafb6a4-396c-4da1-8180-83531b6a41e3\"))\n .property(\"name\",\"Alice\")\n .property(\"email\",\"alice@example.org\")\n .as(\"alice\")\n \n .addV(\"user\")\n .property(\"id\",UUID.fromString(\"0d2b2319-9c0b-4ecb-8953-98687f6a99ce\"))\n .property(\"name\",\"Bob\")\n .property(\"email\",\"bob@example.org\")\n .as(\"bob\")\n \n .addV(\"account\")\n .property(\"id\",UUID.fromString(\"83428a85-5c8f-4398-8019-918d6e1d3a93\"))\n .property(\"type\",\"Checking\")\n .property(\"balance\",2500.00)\n .as(\"alice_account_1\")\n \n .addV(\"account\")\n .property(\"id\",UUID.fromString(\"811b56c3-cead-40d9-9a3d-e230dcd64f2f\"))\n .property(\"type\",\"Savings\")\n .property(\"balance\",1500.00)\n .as(\"alice_account_2\")\n \n .addV(\"account\")\n .property(\"id\",UUID.fromString(\"81def5e2-84f4-4885-a920-1c14d2be3c20\"))\n .property(\"type\",\"Checking\")\n .property(\"balance\",1000.00)\n .as(\"bob_account_1\")\n \n .addE(\"has\")\n .from(\"alice\")\n .to(\"alice_account_1\")\n \n .addE(\"has\")\n .from(\"alice\")\n .to(\"alice_account_2\")\n \n .addE(\"has\")\n .from(\"bob\")\n .to(\"bob_account_1\")\n \n .iterate()","12":"gremlin","13":{"1":"2f4051d5-aa30-4802-89be-be8e869edd85","10":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","3":0},"11":1,"12":false,"14":19},"16":true,"17":false,"25":"LOCAL.ONE"},{"1":"ac96d8d4-8685-4fec-a661-a5757103a0f5","10":4,"11":"**4**. Execute traversals ...","12":"markdown","13":{"1":"12d74fe6-e005-456f-bd63-5bb8379546fa","10":{"9":"

4. Execute traversals …

\n"},"11":4,"12":false},"16":true,"17":true,"18":{},"25":"LOCAL.ONE"},{"1":"9a34ba5c-4755-4195-9cb2-4db74748b910","10":4,"11":"g.with(\"label-warning\",false).V()\n//g.with(\"label-warning\",false).E()\n//g.V().has(\"user\",\"id\",UUID.fromString(\"1cafb6a4-396c-4da1-8180-83531b6a41e3\"))\n//g.V(\"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3\")\n//g.V().has(\"user\",\"name\",\"Alice\")\n//g.V().has(\"user\",\"name\",\"Alice\").out(\"has\")\n//g.V().has(\"user\",\"name\",\"Alice\").out(\"has\").values(\"balance\")\n//g.V().has(\"user\",\"name\",\"Alice\").out(\"has\").values(\"balance\").sum()\n//g.V().has(\"user\",\"name\",\"Alice\").out(\"has\").where(values(\"balance\").is(gt(2000)))\n//V().has(\"user\",\"name\",\"Alice\").out(\"has\").groupCount().by(\"type\")","12":"gremlin","13":{"1":"a21176b4-5d1c-45c9-9ac7-e32a28ab43f1","10":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"127":"com.datastax.studio.notebook.serialization.model.V1NotebookModel$Graph$Vertex","1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20","10":"account"},{"127":"com.datastax.studio.notebook.serialization.model.V1NotebookModel$Graph$Vertex","1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f","10":"account"},{"127":"com.datastax.studio.notebook.serialization.model.V1NotebookModel$Graph$Vertex","1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93","10":"account"},{"127":"com.datastax.studio.notebook.serialization.model.V1NotebookModel$Graph$Vertex","1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce","10":"user"},{"127":"com.datastax.studio.notebook.serialization.model.V1NotebookModel$Graph$Vertex","1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3","10":"user"}],"3":5},"11":13,"12":false,"13":{"100":{"1":[{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20","2":{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20","10":"account","100":[{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20#balance","10":"balance","100":"balance","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"12":"1000.00"}],"3":1}},{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"81def5e2-84f4-4885-a920-1c14d2be3c20\""}],"3":1}},{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20#type","10":"type","100":"type","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Checking"}],"3":1}}]}},{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce","2":{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce","10":"user","100":[{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce#name","10":"name","100":"name","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Bob"}],"3":1}},{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"0d2b2319-9c0b-4ecb-8953-98687f6a99ce\""}],"3":1}},{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce#email","10":"email","100":"email","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"bob@example.org"}],"3":1}}]}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3","2":{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3","10":"user","100":[{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#name","10":"name","100":"name","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Alice"}],"3":1}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"1cafb6a4-396c-4da1-8180-83531b6a41e3\""}],"3":1}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#email","10":"email","100":"email","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"alice@example.org"}],"3":1}}]}},{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f","2":{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f","10":"account","100":[{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f#balance","10":"balance","100":"balance","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"12":"1500.00"}],"3":1}},{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"811b56c3-cead-40d9-9a3d-e230dcd64f2f\""}],"3":1}},{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f#type","10":"type","100":"type","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Savings"}],"3":1}}]}},{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93","2":{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93","10":"account","100":[{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93#balance","10":"balance","100":"balance","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"12":"2500.00"}],"3":1}},{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"83428a85-5c8f-4398-8019-918d6e1d3a93\""}],"3":1}},{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93#type","10":"type","100":"type","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Checking"}],"3":1}}]}}]},"101":{"1":[{"1":"dseg:/user-has-account/1cafb6a4-396c-4da1-8180-83531b6a41e3/83428a85-5c8f-4398-8019-918d6e1d3a93","2":{"1":"dseg:/user-has-account/1cafb6a4-396c-4da1-8180-83531b6a41e3/83428a85-5c8f-4398-8019-918d6e1d3a93","10":"has","101":{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93","10":"account","100":[{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93#balance","10":"balance","100":"balance","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"12":"2500.00"}],"3":1}},{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"83428a85-5c8f-4398-8019-918d6e1d3a93\""}],"3":1}},{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93#type","10":"type","100":"type","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Checking"}],"3":1}}]},"102":{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3","10":"user","100":[{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#name","10":"name","100":"name","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Alice"}],"3":1}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"1cafb6a4-396c-4da1-8180-83531b6a41e3\""}],"3":1}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#email","10":"email","100":"email","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"alice@example.org"}],"3":1}}]},"103":{}}},{"1":"dseg:/user-has-account/0d2b2319-9c0b-4ecb-8953-98687f6a99ce/81def5e2-84f4-4885-a920-1c14d2be3c20","2":{"1":"dseg:/user-has-account/0d2b2319-9c0b-4ecb-8953-98687f6a99ce/81def5e2-84f4-4885-a920-1c14d2be3c20","10":"has","101":{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20","10":"account","100":[{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20#balance","10":"balance","100":"balance","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"12":"1000.00"}],"3":1}},{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"81def5e2-84f4-4885-a920-1c14d2be3c20\""}],"3":1}},{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20#type","10":"type","100":"type","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Checking"}],"3":1}}]},"102":{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce","10":"user","100":[{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce#name","10":"name","100":"name","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Bob"}],"3":1}},{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"0d2b2319-9c0b-4ecb-8953-98687f6a99ce\""}],"3":1}},{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce#email","10":"email","100":"email","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"bob@example.org"}],"3":1}}]},"103":{}}},{"1":"dseg:/user-has-account/1cafb6a4-396c-4da1-8180-83531b6a41e3/811b56c3-cead-40d9-9a3d-e230dcd64f2f","2":{"1":"dseg:/user-has-account/1cafb6a4-396c-4da1-8180-83531b6a41e3/811b56c3-cead-40d9-9a3d-e230dcd64f2f","10":"has","101":{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f","10":"account","100":[{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f#balance","10":"balance","100":"balance","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"12":"1500.00"}],"3":1}},{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"811b56c3-cead-40d9-9a3d-e230dcd64f2f\""}],"3":1}},{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f#type","10":"type","100":"type","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Savings"}],"3":1}}]},"102":{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3","10":"user","100":[{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#name","10":"name","100":"name","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"Alice"}],"3":1}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#id","10":"id","100":"id","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"\"1cafb6a4-396c-4da1-8180-83531b6a41e3\""}],"3":1}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3#email","10":"email","100":"email","101":{"127":"com.datastax.studio.notebook.serialization.model.ListWithNulls","1":[{"9":"alice@example.org"}],"3":1}}]},"103":{}}}]}},"14":10},"15":7,"16":true,"17":false,"18":{},"19":{"11":{"1":[{"1":"user","2":"{{{name}}}"}]},"12":{"1":[{"1":"dseg:/account/81def5e2-84f4-4885-a920-1c14d2be3c20","2":{"10":-16,"11":-130}},{"1":"dseg:/user/0d2b2319-9c0b-4ecb-8953-98687f6a99ce","2":{"10":-155,"11":-11}},{"1":"dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3","2":{"10":50,"11":-22}},{"1":"dseg:/account/811b56c3-cead-40d9-9a3d-e230dcd64f2f","2":{"10":114,"11":110}},{"1":"dseg:/account/83428a85-5c8f-4398-8019-918d6e1d3a93","2":{"10":-85,"11":35}}]},"13":"a21176b4-5d1c-45c9-9ac7-e32a28ab43f1","14":{"10":22,"11":-2},"16":{"11":{"10":"studio::none"}}},"22":423,"25":"LOCAL.ONE"}],"16":{"1":{}},"17":"users_and_accounts","19":false}code.txt0100644 0000000 0000000 00000006227 14240542155 011271 0ustar000000000 0000000 --------------------NOTEBOOK_Introduction to NoSQL-------------------- 2 | --------------------CELL_MARKDOWN_1-------------------- 3 | **1**. Drop all schema definitions and data. 4 | --------------------CELL_GREMLIN_2-------------------- 5 | schema.drop() 6 | --------------------CELL_MARKDOWN_3-------------------- 7 | **2**. Define the graph schema. Use the *DataStax Studio* schema view to explore the schema visually. 8 | --------------------CELL_GREMLIN_4-------------------- 9 | // Define vertex labels 10 | schema.vertexLabel("user").ifNotExists(). 11 | partitionBy("id",UUID). 12 | property("name",Text). 13 | property("email",Text). 14 | create() 15 | schema.vertexLabel("account").ifNotExists(). 16 | partitionBy("id",UUID). 17 | property("type",Text). 18 | property("balance",Decimal). 19 | create() 20 | 21 | // Define edge labels 22 | schema.edgeLabel("has").ifNotExists(). 23 | from("user").to("account"). 24 | create() 25 | 26 | // Define vertex indexes 27 | schema.vertexLabel('user').materializedView('user_by_name').ifNotExists().partitionBy('name').clusterBy('id', Asc).create() 28 | schema.vertexLabel('user').materializedView('user_by_email').ifNotExists().partitionBy('email').clusterBy('id', Asc).create() 29 | 30 | // Define edge indexes 31 | schema.edgeLabel('has').from('user').to('account').materializedView('account_has_user').ifNotExists().inverse().create() 32 | --------------------CELL_MARKDOWN_5-------------------- 33 | **3**. Add 5 vertices and 3 edges. 34 | --------------------CELL_GREMLIN_6-------------------- 35 | g.addV("user") 36 | .property("id",UUID.fromString("1cafb6a4-396c-4da1-8180-83531b6a41e3")) 37 | .property("name","Alice") 38 | .property("email","alice@example.org") 39 | .as("alice") 40 | 41 | .addV("user") 42 | .property("id",UUID.fromString("0d2b2319-9c0b-4ecb-8953-98687f6a99ce")) 43 | .property("name","Bob") 44 | .property("email","bob@example.org") 45 | .as("bob") 46 | 47 | .addV("account") 48 | .property("id",UUID.fromString("83428a85-5c8f-4398-8019-918d6e1d3a93")) 49 | .property("type","Checking") 50 | .property("balance",2500.00) 51 | .as("alice_account_1") 52 | 53 | .addV("account") 54 | .property("id",UUID.fromString("811b56c3-cead-40d9-9a3d-e230dcd64f2f")) 55 | .property("type","Savings") 56 | .property("balance",1500.00) 57 | .as("alice_account_2") 58 | 59 | .addV("account") 60 | .property("id",UUID.fromString("81def5e2-84f4-4885-a920-1c14d2be3c20")) 61 | .property("type","Checking") 62 | .property("balance",1000.00) 63 | .as("bob_account_1") 64 | 65 | .addE("has") 66 | .from("alice") 67 | .to("alice_account_1") 68 | 69 | .addE("has") 70 | .from("alice") 71 | .to("alice_account_2") 72 | 73 | .addE("has") 74 | .from("bob") 75 | .to("bob_account_1") 76 | 77 | .iterate() 78 | --------------------CELL_MARKDOWN_7-------------------- 79 | **4**. Execute traversals ... 80 | --------------------CELL_GREMLIN_8-------------------- 81 | g.with("label-warning",false).V() 82 | //g.with("label-warning",false).E() 83 | //g.V().has("user","id",UUID.fromString("1cafb6a4-396c-4da1-8180-83531b6a41e3")) 84 | //g.V("dseg:/user/1cafb6a4-396c-4da1-8180-83531b6a41e3") 85 | //g.V().has("user","name","Alice") 86 | //g.V().has("user","name","Alice").out("has") 87 | //g.V().has("user","name","Alice").out("has").values("balance") 88 | //g.V().has("user","name","Alice").out("has").values("balance").sum() 89 | //g.V().has("user","name","Alice").out("has").where(values("balance").is(gt(2000))) 90 | //V().has("user","name","Alice").out("has").groupCount().by("type") 91 | versions-info.txt0100644 0000000 0000000 00000000036 14240542155 013150 0ustar000000000 0000000 Studio Version: 6.8.0-b02f3ef 92 | -------------------------------------------------------------------------------- /graph_databases.md: -------------------------------------------------------------------------------- 1 | ## 🎓🔥 Graph Database practice 2 | 3 | This is an optional part that is normally left as an exercise for the reader, 4 | to offer a hands-on learning experience on Graph Databases using DataStax Graph 5 | and DataStax Studio. 6 | 7 | > Note: as opposed to the rest of today's pratice, this needs to be done on your own machine. 8 | 9 | **✅ 5a. Prerequisites** 10 | 11 | **Minimal Configuration**: You need to have a computer with this minimal configuration requirements 12 | - At least 2CPU 13 | - At least 6GB or RAM 14 | 15 | **Install Docker and Docker Compose** 16 | 17 | You need to install Docker and Docker-compose on your machine 18 | - [Install **Docker** for Windows/Mac/Linux](https://github.com/DataStax-Academy/kubernetes-workshop-online/blob/master/0-setup-your-cluster/README.MD#1-install-docker) 19 | - [Install **Docker-Compose** for Windows/Mac/Linux](https://github.com/DataStax-Academy/kubernetes-workshop-online/blob/master/0-setup-your-cluster/README.MD#2-install-docker-compose) 20 | 21 | **✅ 5b. Create a docker network named 'graph'** 22 | 23 | ```bash 24 | docker network create graph 25 | ``` 26 | 27 | 🖥️ *Expected output* 28 | ```bash 29 | $workshop_introduction_to_nosql> docker network create graph 30 | 31 | 64f8bcc2dda416d6dc80ef3c1ac97902b9d90007842808308e9d741d179d9344 32 | ``` 33 | 34 | **✅ 5c.Clone this repository (or download ZIP from the github UI)** 35 | 36 | ```bash 37 | git clone https://github.com/datastaxdevs/workshop-introduction-to-nosql.git 38 | 39 | cd workshop-introduction-to-nosql 40 | ``` 41 | 42 | **✅ 5d.Start the containers** 43 | 44 | :warning: *Linux users:* 45 | >Folder `datastax-studio-config` is mapped to docker container (see: `docker-compose.yaml` file) and dse studio runs as user `studio` with `uid=997` and >`gui=997` which needs RW access to that folder. 46 | > 47 | >Run this command if you are on a linux system: 48 | >```bash 49 | >sudo chown -R 997:997 ./datastax-studio-config 50 | >``` 51 | :warning: *Linux users:* 52 | 53 | :📝 Note for *Windows users:* 54 | >Start the *studio image* `without a volume`. Remove these 2 lines above `networks` in *studio* (see: `docker-compose.yaml` file) 55 | >```yaml 56 | >volumes: 57 | > - "./datastax-studio-config:/var/lib/datastax-studio" 58 | 59 | :📝 Note for *Windows users:* 60 | 61 | Start containers: 62 | ```bash 63 | docker-compose up -d 64 | ``` 65 | 66 | 🖥️ *Expected output* 67 | ```bash 68 | $workshop_introduction_to_nosql> docker-compose up -d 69 | 70 | Creating dse ... done 71 | Creating workshop-introduction-to-nosql_studio_1 ... done 72 | ``` 73 | Wait for the application to start (30s) and open [http://localhost:9091](http://localhost:9091) 74 | 75 | 76 | ![image](images/studio_home.png?raw=true) 77 | 78 | **✅ 5e.Check database connection** 79 | 80 | Open the ellipsis and click `Connections` 81 | 82 | ![image](images/studio_test_connection1.png?raw=true) 83 | 84 | Select the `default localhost` connection 85 | 86 | ![image](images/studio_test_connection2.png?raw=true) 87 | 88 | Check that `dse` is set for the host (pointing to a local cassandra) 89 | 90 | ![image](images/studio_test_connection3.png?raw=true) 91 | 92 | Click the button `Test` and expect the output `Connected Successfully` 93 | 94 | ![image](images/studio_test_connection4.png?raw=true) 95 | 96 | **✅ 5f. Open the notebook Work** 97 | 98 | Use the ellipsis to now select `Notebooks` 99 | 100 | ![image](images/studio_home.png?raw=true) 101 | 102 | Once the notebook opens it asks you to create the graph: click the `Create Graph` button (and leave all settings to default) 103 | 104 | ![image](images/studio_create_graph.png?raw=true) 105 | 106 | Execute cell after cell spotting the `Real Time >` button in each cell (top right) 107 | 108 | ![image](images/studio_notebook_1.png?raw=true) 109 | 110 | Voila ! 111 | 112 | ![image](images/studio_notebook_2.png?raw=true) 113 | 114 | **✅ 5g. Close Notebook** 115 | 116 | To close open notebooks you can now use 117 | 118 | ```bash 119 | docker-compose down 120 | ``` 121 | 122 | 🖥️ *Expected output* 123 | ```bash 124 | $workshop_introduction_to_nosql> docker-compose down 125 | Stopping workshop-introduction-to-nosql_studio_1 ... done 126 | Stopping dse ... 127 | ``` 128 | 129 | Congratulations, you completed the Graph Database practice! 130 | 131 | Back to [main README](README.md#practice). -------------------------------------------------------------------------------- /images/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/01.png -------------------------------------------------------------------------------- /images/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/02.png -------------------------------------------------------------------------------- /images/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/03.png -------------------------------------------------------------------------------- /images/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/05.png -------------------------------------------------------------------------------- /images/connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/connect.png -------------------------------------------------------------------------------- /images/cqlconsole1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/cqlconsole1.png -------------------------------------------------------------------------------- /images/graphql1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/graphql1.png -------------------------------------------------------------------------------- /images/graphql2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/graphql2.png -------------------------------------------------------------------------------- /images/intro-to-nosql-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/intro-to-nosql-badge.png -------------------------------------------------------------------------------- /images/intro-to-nosql-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/intro-to-nosql-cover.png -------------------------------------------------------------------------------- /images/playground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/playground.png -------------------------------------------------------------------------------- /images/playground1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/playground1.png -------------------------------------------------------------------------------- /images/studio_create_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_create_graph.png -------------------------------------------------------------------------------- /images/studio_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_home.png -------------------------------------------------------------------------------- /images/studio_notebook_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_notebook_1.png -------------------------------------------------------------------------------- /images/studio_notebook_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_notebook_2.png -------------------------------------------------------------------------------- /images/studio_test_connection1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_test_connection1.png -------------------------------------------------------------------------------- /images/studio_test_connection2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_test_connection2.png -------------------------------------------------------------------------------- /images/studio_test_connection3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_test_connection3.png -------------------------------------------------------------------------------- /images/studio_test_connection4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/studio_test_connection4.png -------------------------------------------------------------------------------- /images/swagger/swagger_3c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/swagger/swagger_3c.png -------------------------------------------------------------------------------- /images/swagger/swagger_3d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/swagger/swagger_3d.png -------------------------------------------------------------------------------- /images/swagger/swagger_3eB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/swagger/swagger_3eB.png -------------------------------------------------------------------------------- /images/swagger/swagger_3fB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/swagger/swagger_3fB.png -------------------------------------------------------------------------------- /images/swagger/swagger_3g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/swagger/swagger_3g.png -------------------------------------------------------------------------------- /images/swagger_responses_annotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/swagger_responses_annotated.png -------------------------------------------------------------------------------- /images/token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/token.png -------------------------------------------------------------------------------- /images/token_hl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/token_hl.png -------------------------------------------------------------------------------- /images/tutorials/astra-create-db.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/tutorials/astra-create-db.gif -------------------------------------------------------------------------------- /images/tutorials/astra-create-token.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/tutorials/astra-create-token.gif -------------------------------------------------------------------------------- /images/tutorials/astra_signup.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/tutorials/astra_signup.gif -------------------------------------------------------------------------------- /images/tutorials/generate_token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/images/tutorials/generate_token.png -------------------------------------------------------------------------------- /slides-shelovedata.pptx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/slides-shelovedata.pptx.pdf -------------------------------------------------------------------------------- /slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-introduction-to-nosql/9ad93e5d3b71bc294ff34ac3e81e418ab3e1de4d/slides.pdf --------------------------------------------------------------------------------