pull/1/head
Rob Hedgpeth 2020-02-06 10:44:33 -06:00
rodzic 5f0c6e62b7
commit a96a6df976
15 zmienionych plików z 279 dodań i 53 usunięć

171
Orders/README.md 100644
Wyświetl plik

@ -0,0 +1,171 @@
# Orders
**Orders** is a web application written in [React.js](https://reactjs.org) and [Node.js](https://nodejs.org) that, backed by the power of the [MariaDB Node.js Connector](https://github.com/MariaDB/mariadb-connector-nodejs), introduces you to the power, performance, and simplicity of [MariaDB](https://mariadb.com/resources/blog/deploying-mariadb-platform-x4/#smart).
<p align="center" spacing="10">
<kbd>
<img src="media/demo.gif" />
</kbd>
</p>
The following will walk you through the steps for getting this application up and running (locally) within minutes! This application is completely open source. Please feel free to use it and the source code as you see fit!
# Table of Contents
1. [Environment and Compatibility](#compatibility)
2. [Getting start with MariaDB](#overview)
1. [The Basics](#intro-mariadb)
2. [Create the schema](#create-schema)
3. [Requirements to run the app](#requirements)
4. [Getting started with the app](#getting-started)
1. [Grab the code](#grab-code)
2. [Build the code](#build-code)
3. [Run the app](#run-app)
5. [Support and Contribution](#support-contribution)
6. [License](#license)
## Environment and Compatibility <a name="compatibility"></a>
This sample was created using the following techologies:
* [MariaDB Platform](https://mariadb.com/products/)
* [React.js (v.16.12.0)](https://github.com/facebook/react/blob/master/CHANGELOG.md#16120-november-14-2019)
* [Node.js (v.12.x)](https://nodejs.org/docs/latest-v12.x/api/index.html)
* [NPM (v.6.11.3)](https://docs.npmjs.com/)
This sample was tested on macOS v.10.14.6.
## Overview <a name="overview"></a>
### Introduction to MariaDB <a name="intro-mariadb"></a>
[MariaDB platform](https://mariadb.com/products/mariadb-platform/) unifies [MariaDB TX (transactions)](https://mariadb.com/products/mariadb-platform-transactional/) and [MariaDB AX (analytics)](https://mariadb.com/products/mariadb-platform-analytical/) so transactional applications can retain unlimited historical data and leverage powerful, real-time analytics in order to provide data-driven customers with more information, actionable insight and greater value – and businesses with endless ways to monetize data. It is the enterprise open source database for hybrid transactional/analytical processing at scale.
<p align="center">
<kdb>
<img src="media/platform.png" />
</kbd>
</p>
### Getting start with MariaDB <a name="installation"></a>
To download and deploy MariaDB HTAP check out the instructions [here](https://mariadb.com/docs/deploy/installation/). You can also make use of the [MariaDB Image available on Docker Hub](https://hub.docker.com/_/mariadb).
### Create the schema <a name="create-schema"></a>
Next you can create the schema necessary for this application by running
```
$ ./create_schema.sh
```
or executing the SQL within (create.sql)(schema/create.sql) directly
```sql
CREATE DATABASE `orders`;
CREATE TABLE `orders` (
`description` varchar(100) NOT NULL DEFAULT ''
) ENGINE=InnoDB;
```
## Requirements to run the app <a name="requirements"></a>
This project assumes you have familiarity with building web applications using [ReactJS](https://reactjs.org) and [NodeJS](https://nodejs.org) technologies.
The following is required to run this application:
1. [Download and install MariaDB](#installation).
2. [Download and install Node.js](https://nodejs.org/en/download/).
3. git (Optional) - this is required if you would prefer to pull the source code from GitHub repo.
- Create a [free github account](https://github.com/) if you dont already have one
- git can be downloaded from git-scm.org
## Getting started with the app <a name="getting-started"></a>
### Grab the code <a name="grab-code"></a>
Download this code directly or use [git](git-scm.org) (through CLI or a client) to retrieve the code.
### Configure the code <a name="configure-code"></a>
Configure the MariaDB connection by [adding an .env file to the Node.js project](https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/promise-api.md#security-consideration).
Example implementation:
```
DB_HOST=<host_address>
DB_PORT=<port_number>
DB_USER=<username>
DB_PASS=<password>
DB_NAME=<database>
```
The environmental variables from `.env` are used within the [db.js](src/db.js) for the MariaDB Node.js Connector configuration pool settings:
```javascript
var mariadb = require('mariadb');
require('dotenv').config();
const pool = mariadb.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
port: process.env.DB_PORT,
multipleStatements: true,
connectionLimit: 5
});
```
### Build the code <a name="build-code"></a>
Once you have retrieved a copy of the code you're ready to build and run the project! However, before running the code it's important to point out that the application uses several Node Packages.
Executing the CLI command
```
$ npm install
```
within
* [src](src): the Node.js project
* [client](src/client): the React.js project
folders will target the the relative `package.json` file and [install all dependencies](https://docs.npmjs.com/downloading-and-installing-packages-locally).
### Run the app <a name="run-app"></a>
Once you've pulled down the code and have verified that all of the required Node packages are installed you're ready to run the application! It's as easy as 1,2,3.
1. Using a command line interface (CLI) navigate to the [src](src) directory.
<p align="center">
<img src="media/cli_root.png" />
</p>
2. Run the command:
```bash
$ npm start
```
<p align="center">
<img src="media/npm_start.png" />
</p>
3. Open a browser window and navigate to http://localhost:3000.
<p align="center">
<kbd>
<img src="media/get_started.png" />
</kbd>
</p>
## Support and Contribution <a name="support-contribution"></a>
Thanks so much for taking a look at the Bookings app! As this is a very simple example, there's plenty of potential for customization. Please feel free to submit PR's to the project to include your modifications!
If you have any questions, comments, or would like to contribute to this or future projects like this please reach out to us directly at developers@mariadb.com or on [Twitter](https://twitter.com/mariadb).
## License <a name="license"></a>
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=plastic)](https://opensource.org/licenses/Apache-2.0)

Wyświetl plik

@ -0,0 +1,6 @@
#!/bin/bash
SCHEMA_DIR=$(readlink -f ./schema)
# create orders database and table
/usr/bin/mysql --defaults-file=/etc/my.cnf -u root -vvv < $SCHEMA_DIR/create.sql

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 43 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 880 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 103 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 236 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 233 KiB

Wyświetl plik

@ -0,0 +1,5 @@
CREATE DATABASE `orders`;
CREATE TABLE `orders` (
`description` varchar(100) NOT NULL DEFAULT ''
) ENGINE=InnoDB;

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 3.8 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 15 KiB

Wyświetl plik

@ -24,7 +24,7 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
<title>Orders</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>

Wyświetl plik

@ -1,23 +1,20 @@
const fs = require("fs");
var mariadb = require('mariadb');
require('dotenv').config();
// Place a .pem file within the project root to use this line
// For SSL connections
//const serverCert = [fs.readFileSync("skysql_chain.pem", "utf8")];
var pools = [
mariadb.createPool({
host: '<host_address>',
user:'<user>',
password: '<password>',
database: 'orders',
port: 5001,
host: process.env.DB_HOST_1,
user: process.env.DB_USER_1,
password: process.env.DB_PASS_1,
port: process.env.DB_PORT_1,
database: process.env.DB_NAME_1,
multipleStatements: true,
connectionLimit: 5,
ssl: {
//ca: serverCert
rejectUnauthorized: false
}
}),
connectionLimit: 5
})/*,
mariadb.createPool({
host: '<host_address>',
user:'<user>',
@ -27,33 +24,19 @@ var pools = [
multipleStatements: true,
connectionLimit: 5,
ssl: {
//ca: serverCert
rejectUnauthorized: false
ca: serverCert
}
}),
mariadb.createPool({
host: '<host_address>',
user:'<user>',
password: '<password>',
database: 'orders',
port: 5003,
multipleStatements: true,
connectionLimit: 5,
ssl: {
//ca: serverCert
rejectUnauthorized: false
}
})
})*/
];
module.exports={
getConnection: function(config_id){
return new Promise(function(resolve,reject){
pools[config_id].getConnection().then(function(connection){
resolve(connection);
}).catch(function(error){
reject(error);
});
getConnection: function(config_id){
return new Promise(function(resolve,reject){
pools[config_id].getConnection().then(function(connection){
resolve(connection);
}).catch(function(error){
reject(error);
});
}
}
});
}
}

Wyświetl plik

@ -10,9 +10,9 @@
"integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
},
"@types/node": {
"version": "12.12.22",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.22.tgz",
"integrity": "sha512-r5i93jqbPWGXYXxianGATOxTelkp6ih/U0WVnvaqAvTqM+0U6J3kw6Xk6uq/dWNRkEVw/0SLcO5ORXbVNz4FMQ=="
"version": "13.1.8",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.8.tgz",
"integrity": "sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A=="
},
"accepts": {
"version": "1.3.7",
@ -183,6 +183,11 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"dotenv": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -370,12 +375,12 @@
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"mariadb": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.1.4.tgz",
"integrity": "sha512-CMLbIKZCzxero94luo25IKpboEuUCvA2g2+NMUBdRYpBCDmnsiQ8kwdgqvuVQ13a4/ZKr87BC1nbe4b3UZXXmQ==",
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.1.5.tgz",
"integrity": "sha512-uRHtjc0bg+Rt91LvIaZNo8tLcYs9YPiiW9Mke/BavFzg0MnctJBDkqZW9X59NyrRGDd7Oz9UshTWgmUpfDZc0Q==",
"requires": {
"@types/geojson": "^7946.0.7",
"@types/node": "^12.12.11",
"@types/node": "^13.1.4",
"denque": "^1.4.1",
"iconv-lite": "^0.5.0",
"long": "^4.0.0",
@ -383,9 +388,9 @@
},
"dependencies": {
"iconv-lite": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz",
"integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==",
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz",
"integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}

Wyświetl plik

@ -13,7 +13,8 @@
"dependencies": {
"body-parser": "^1.19.0",
"concurrently": "^5.0.2",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"mariadb": "^2.1.4"
"mariadb": "^2.1.5"
}
}

Wyświetl plik

@ -6,37 +6,44 @@ let express = require("express"),
// GET
router.get("/", async (req, res, next) => {
let connection_id = req.query.c;
// Set the query string parameters
let read_count = req.query.r;
let write_count = req.query.w;
let connection_id = req.query.c;
let conn;
try {
// Establish connection to SkySQL using the db.js module
conn = await pool.getConnection(connection_id);
let reads = "";
let reads = "";
let writes = "";
// reads
// Create 0-N read queries
for (let i = 0; i < read_count; i++) {
reads += "select * from orders limit 1;";
}
// writes
// Create 0-N write queries
let transaction_id = Date.now().toString();
for (let i = 0; i < write_count; i++) {
writes += "insert into orders (description) values('order - " + transaction_id + "');";
}
// Start latency timer
var start = Date.now();
// Asynchronously execute read and write queries
await Promise.all([conn.query(reads), conn.query(writes)]);
// Calculate latency
var delta = Date.now() - start;
// Return the results
res.send({ execution_time: delta });
} catch (err) {
throw err;
} finally {
// Release (close) the connection
if (conn) return conn.release();
}
});

Wyświetl plik

@ -0,0 +1,48 @@
-----BEGIN CERTIFICATE-----
MIIELzCCAxegAwIBAgIUNz1kWFjbLVDWVCBnEAsf95UPMS8wDQYJKoZIhvcNAQEL
BQAwQTEQMA4GA1UEChMHTWFyaWFEQjEPMA0GA1UECxMGU2t5U1FMMRwwGgYDVQQD
ExNyb290LXBraS5za3lzcWwubmV0MB4XDTE5MDkwNTE4MjMxMVoXDTI5MDkwMjE4
MjM0MFowQTEQMA4GA1UEChMHTWFyaWFEQjEPMA0GA1UECxMGU2t5U1FMMRwwGgYD
VQQDExNyb290LXBraS5za3lzcWwubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEA0orsl93gB0MZuiby/4QmcmK2OrS/hEcDI/AN+Dpn9c3JKeEVp2OD
sft47OHGwdgyagBtNV6zZgOc6IOnwt+rGDmrmiuxHkf/XWV+y66skWAtMyM7ycCL
J3z5dO6xaZvYKJyhPcnx2NROEAJrkdVfoyJCtCElDDdRrknXWLPfZrph8E7I2mDP
SV8ZF4wdxbU7oHKM4CoTRgXQnCDq2Wv8OLZr4Mq224nSmEJK+cXRwKqbFUvuiSco
bTBnJjyeKldqJ/lCRwu9fU6fBHFuBNUEvZBzavt0B8SYi/l22wYHxlpOslowTaG4
Lh8Nj79PP7rsy44hHvOBGc/ZsKIGCDOIMwIDAQABo4IBHTCCARkwDgYDVR0PAQH/
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHAIHx8QSWENuYb/xmuh
17S2nnXWMB8GA1UdIwQYMBaAFHAIHx8QSWENuYb/xmuh17S2nnXWMEAGCCsGAQUF
BwEBBDQwMjAwBggrBgEFBQcwAoYkaHR0cDovLzEyNy4wLjAuMTo4MjAwL3YxL3Br
aV9yb290L2NhMB4GA1UdEQQXMBWCE3Jvb3QtcGtpLnNreXNxbC5uZXQwHAYDVR0e
AQH/BBIwEKAOMAyCCnNreXNxbC5uZXQwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov
LzEyNy4wLjAuMTo4MjAwL3YxL3BraV9yb290L2NybDANBgkqhkiG9w0BAQsFAAOC
AQEAfwo8ZW666UjHJ4DY+M9tDgRwFwFd7v3EBhLrGvkD+CWaiJIS9RnWwE0gn9SU
syBvRn3PrjsveCR3cIjqAzUplOyMMvvJ77E8rzfQEwOhHbATyKNQG32KaitCdEBP
v0XDb7SBw2eKQxdahMcT5yxh9DkCizTXE8usZIiW+V9FVcEPPNia4d9ZMlmLWMcP
pZlxE4W5ngU6iCN7PJ3aeKrk4Y1PM36XJ11f5pouMULUvqbjepa/R1KJt27OSbrJ
RjHDa+s0AljgPZDl7KqQOOA5hrNT1Om+5IVs+uAbY7mWQC2GwYlFsg5laqWf7SC0
hPvVLDb8GaRK6LA4PCROZwiM9g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIID4jCCAsqgAwIBAgIUB9abD+hn9+dtYuqwkA3Rj5ZrPgUwDQYJKoZIhvcNAQEL
BQAwQTEQMA4GA1UEChMHTWFyaWFEQjEPMA0GA1UECxMGU2t5U1FMMRwwGgYDVQQD
ExNyb290LXBraS5za3lzcWwubmV0MB4XDTE5MDkwNTE4MjMxOFoXDTI5MDkwMjE4
MjM0OFowGTEXMBUGA1UEAxMOcGtpLnNreXNxbC5uZXQwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDYov+F2ijXdIiZ0AuX4fAJ6KQ16zb4mQ2qgsrO02yW
kF3EJV6/XQO0WqGok4SjcvLBLuSsQBFahtgB70d/YZ+PBUrwzzmgWa3Ga+GuzKl6
O2QI8vu7l8D0esJe7mY4KsAwNIvMUAdqUUCgB01KmCIwWoVqN1h65dX1qOf1N6qk
f+rXeFKBGoDq/DM6zR90irpYBt2guE5iZd5r63JMXANlmh44IWxEswBqAa4B+GlY
7m7Psk9E+i4rexN45+815SLnHr86y3PNUlFfzgfQwXCLVPqSPGfNzyEz8MZUVYQv
zg+hZmrTe9nCekMi3hk97Dh1x40Y1rSTtbQjUu2SvJepAgMBAAGjgfkwgfYwDgYD
VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLwrAxEtsiHF
Oz/dRW65RxwIHHVmMB8GA1UdIwQYMBaAFHAIHx8QSWENuYb/xmuh17S2nnXWMEAG
CCsGAQUFBwEBBDQwMjAwBggrBgEFBQcwAoYkaHR0cDovLzEyNy4wLjAuMTo4MjAw
L3YxL3BraV9yb290L2NhMBkGA1UdEQQSMBCCDnBraS5za3lzcWwubmV0MDYGA1Ud
HwQvMC0wK6ApoCeGJWh0dHA6Ly8xMjcuMC4wLjE6ODIwMC92MS9wa2lfcm9vdC9j
cmwwDQYJKoZIhvcNAQELBQADggEBAAZZKyFT+mVwuafkBOBYqXb/dCPdqbUnGBic
E2dRK0sxKYbeq7I3lo95UXrtfNBEMY740ZJzUwi6whDUMGNMoV0yFRPHPYvmopC5
wCUA62pPuvHEqwo7HSuO3TBmt5x0b2e9R0gJ535GZSTQI+ArseUwn5IJ2v/BUIRJ
xjAMwRmM9TOWcK6VLEBZoHXEzENrBLHr0fKhVyJhhuQV+xeEVY28odwzwH85AyUk
1lrAIzuz3YCDHtjL449U+hdz/2tytI1KXJscm/mrAhtgUjQnKCY0fFkJESL+TDwX
Sdb13rs8ZQvwanpcOt+Kg86O/vz2P5JLC8fK1L4aUilt0X5b8gc=
-----END CERTIFICATE-----