Cassandra Database + Nodejs บน Docker Apple ARM

สวัสดีครับ บทความนี้เป็นบทความแรกของผม ผมขอขอบคุณทุกคน ทุกท่านที่เข้ามาอ่าน และหากมีอะไรผิดพลาดในข้อมูลที่ผมได้กล่าวข้างต้น ผมขอน้อมรับและนำไปปรับปรุง โดยผมขอใช้ภาษาไทยและข้อความภาษาไทยให้สำหรับนักพัฒนาคนไทยด้วยกันเข้าใจ โดยผมขอเล่าความหลัง ในวัยละอ่อนก่อนละกัน
เรากำลังตามหา NoSQL ที่สามารถขยายได้และมีประสิทธิภาพสูงโดยไม่ต้องกังวลเรื่องระบบจะล่มหรือปัญหาคอขวด ซึ่งเป็นแบบ High avalibility ในสเกลระดับบริษัทที่รับภาระโหลดได้มหาศาล นั้นก็คือ Cassandra นั้นเอง
Cassandra คือ ?
ขอเชิญคุณ Mr.doocode มาเล่าเรื่องให้ฟังนะครับ (ฟังหูไว้ฟัง) Cassandra คือฐานข้อมูลแบบ NoSQL นั้นเป็นรูปแบบ Data Storage Disc ซึ่ง ประเภทการจัดเก็บของข้อมูลเป็นในรูปแบบ Column รูปแบบของ Protocol TCP/IP Transactions เป็นในรูปแบบ Local และมีภาษาในการ query ของตัวเองคือ CQL ซึ่งคล้ายกับ SQL พัฒนาที่มาของ Facebook โดยคุณ Avinash Laskshman และคุณ Prashant Malik เพื่อทำฟีเจอร์ Facebook inbox search ก่อนจะปล่อย Open Source ในปี 2008 และกลายเป็นโครงการหลักของ Apache ในปี 2010 ส่วน Concurrency นั้นเป็นแบบ MVCC ย่อมาจาก( Multiversion concurrency control )
รับชมคลิปวิดีโอ
รูปแบบในการ Triggers พร้อมทำงานได้อย่างดี Relication เป็นแบบ Multi-Master ลักษณะเฉพาะของพี่แก ก็คือ การติดต่อข้ามระหว่าง BigTable and Dynamo ซึ่งให้เรามองในรูปแบบ ของ Node นิยมใช้กับ Banking , Finance , Logging และรายการเงินทั้งหลายแหล
อธิบายยืดยาวจนคนอ่านก็คงจะหลับได้ สองตื่นแล้ว เรามาเข้าหัวข้อพาทำกันเลยดีกว่า เพราะเราเน้นปฏิบัติและใช้งาน ผมเชื่อว่าการทำซ้ำจะทำให้คนเรียนรู้ได้ดีและพัฒนาสิ่งที่มีได้มากขึ้น โดยผู้พัฒนาก็ดันใช้ Apple M1 จะเหงา ๆ อยู่แต่หากเราไปดูใน Docker hub จะเห็นรองรับ arm64v8 ของ M1 อยู่เช่นกัน
กรณีสำหรับใช้สถาปัยกรรม Arm Macbook M1 ให้ทำตามนี้
docker pull arm64v8/cassandra
docker run — name Cassandra -p 7700:7700 -d arm64v8/cassandra
docker exec -it Cassandra bash
กรณีสำหรับใช้สถาปัยกรรม X86 Windows , Macbook , Linux ให้ใช้ตัวนี้
docker pull cassandra
docker run — name Cassandra -p 7700:7700 -d cassandra
docker exec -it Cassandra bash
เมื่อเราทำการติดตั้ง docker pull เรียบร้อยแล้วเราเข้ามาภายในของ container Cassandra ให้เราลองทำขั้นตอนต่อไปนี้เพื่อตรวจสอบว่า สามารถใช้งานได้
cqlsh
เมื่อเราใช้งานได้และเข้ามาในส่วนของ cqlsh แล้วต่อไปจะเป็นการสร้าง Keyspace แล้วมันคือละ เนมสเปซที่กำหนดการจำลองข้อมูลบนโหนด คลัสเตอร์ประกอบด้วยหนึ่งคีย์สเปซต่อโหนด
รูปแบบ Syntax CREATE KEYSPACE
<identifier>
WITH<properties>
CREATE KEYSPACE keyspace WITH REPLICATION = { ‘class’ : ‘SimpleStrategy’, ‘replication_factor’ : 1};
เมื่อเราทำการสร้าง keyspace เรียบร้อยแล้วต่อมาให้เราทำการลองสร้างตารางขึ้นมากัน โดยหากผมไม่พูดก็ไม่ได้จะถือว่าเป็นการให้ข้อมูลไม่ครบถ้วน โดยประเภทของ CQL Datatype มีอะไรกันบ้าง
รูปแบบ Syntax CREATE (TABLE | COLUMNFAMILY)
<tablename>
<column-definition>
,<column-definition>
) (WITH<option>
AND<option>
)
CREATE TABLE keyspace.users (id UUID PRIMARY KEY, username text, password text);
เมื่อเราสร้างเสร็จแล้วต่อไปให้เราลองพิมพ์ commend line ใน cqlsh
select * from keyspace.users;
เท่านี้ก็เป็นอันเสร็จสิ้นต่อมาให้เราทำการลอง Insert Data in Users กันหน่อย ด้วยการใช้ Lib cassandra-driver
ตัวอย่าง Basic usage เรียกใช้งาน Lib cassandra-driver
const cassandra = require('cassandra-driver');
สำหรับกรณีเราใช้ uuid ให้เราทำการใช้ฟังก์ชัน types.Uuid
const Uuid = require('cassandra-driver').types.Uuid;
const id = Uuid.random();
const client = new cassandra.Client({contactPoints: ['localhost:7700'],localDataCenter:'datacenter1',keyspace: 'keyspace'});
const queries = [{query: `INSERT INTO keyspace.users(id,username,password) VALUES (?,?, ?)',params: [id,'mr.','doocode']`}];
await client.batch(queries, { prepare: true }).catch(()=>{console.log('เกิดข้อผิดพลาด')})
เสร็จแล้วเรามาลอง พิมพ์ว่า select * from keyspace.users;
ใน cqlsh กันอีกครั้งหากข้อมูลขึ้นแปลว่าตอนนี้เราสามารถ connection และก็ทำการเพิ่มข้อมูลได้แล้ว
ขอแสดงความยินดีด้วยนะครับ 😎
นักพัฒนาระบบในนาม EdVISORY ขอขอบคุณที่ทุกคนตามอ่านจนถึงบรรทัดสุดท้าย และก่อนจากกันผมอยากขอเสริม การใช้งานและข้อมูลในการศึกษา