Tải bản đầy đủ - 0 (trang)
3 Công nghệ hỗ trợ

3 Công nghệ hỗ trợ

Tải bản đầy đủ - 0trang

15



-



Các máy chủ quảng cáo



-



Các ứng dụng dữ liệu thời gian thực khác.



2.3.1.3 Ưu nhược điểm của node.js

-



Ưu điểm:





Đặc điểm nổi bật của Node.js là nó nhận và xử lý nhiều kết nối chỉ với một

single-thread. Điều này giúp hệ thống tốn ít RAM nhất và chạy nhanh nhất

khi khơng phải tạo thread mới cho mỗi truy vấn giống PHP. Ngoài ra, tận

dụng ưu điểm non-blocking I/O của Javascript mà Node.js tận dụng tối đa tài

nguyên của server mà không tạo ra độ trễ như PHP







JSON APIs với cơ chế event-driven, non-blocking I/O(Input/Output) và mơ

hình kết hợp với Javascript là sự lựa chọn tuyệt vời cho các dịch vụ Webs

làm bằng JSON.







NodeJS rất phù hợp để làm ứng dụng trên trang đơn ( Single page

Application) như Gmail. Với khả năng xử lý nhiều Request/s đồng thời thì

thời gian phản hồi nhanh. Các ứng dụng bạn định viết khơng muốn nó tải lại

trang, gồm rất nhiều request từ người dùng cần sự hoạt động nhanh để thể

hiện sự chuyên nghiệp thì NodeJS sẽ là sự lựa chọn của bạn.







Shelling tools unix NodeJS sẽ tận dụng tối đa Unix để hoạt động. Tức là

NodeJS có thể xử lý hàng nghìn Process và trả ra một luồng khiến cho hiệu

xuất hoạt động đạt mức tối đa nhất và tuyệt vời nhất.







Luồng dữ liệu (Streamming Data) các web thông thường gửi HTTP request

và nhận phản hồi lại. Giả xử sẽ cần xử lý một luồng dữ liệu cực lớn, NodeJS

sẽ xây dựng các Proxy phân vùng các luồng dữ liệu để đảm bảo tối đa hoạt

động cho các luồng dữ liệu khác.







Với sự ra đời của các ứng dụng di động & HTML 5 nên Node.js rất hiệu quả

khi xây dựng những ứng dụng thời gian thực (real-time applications) như

ứng dụng chat, các dịch vụ mạng xã hội như Facebook, Twitter,…



-



Nhược điểm:



16



Ứng dụng nặng tốn tài nguyên nếu bạn cần xử lý các ứng dụng tốn tài

nguyên CPU như encoding video, convert file, decoding encryption… hoặc

các ứng dụng tương tự như vậy thì khơng nên dùng NodeJS (Lý do: NodeJS

được viết bằng C++ và Javascript, nên phải thơng qua thêm một trình biên

dịch của NodeJS sẽ lâu hơn 1 chút ). Trường hợp này bạn hãy viết một Add

on C++ để tích hợp với NodeJS để tăng hiệu suất tối đa!

2.3.2 Công nghệ Meteor

2.3.2.1 Giới thiệu

Meteor là một khung cộng tác JavaScript mới với mục đích tự động và đơn giản hóa

việc phát triển một ứng dụng web hoạt động thời gian thực. Nó xử lý giao tiếp thời

gian thực bằng một giao thức gọi là Giao thức Dữ liệu Phân tán (Distributed Data

Protocol - DDP), nó được hỗ trợ trên các trình duyệt mới hơn sử dụng WebSockets

và trên các trình duyệt cũ hơn sử dụng AJAX Long-Polling. Trong cả hai trường

hợp, giao tiếp giữa trình duyệt và máy chủ là trong suốt.

Giao thức DDP được thiết kế để làm việc với tập hợp các tài liệu JSON (JavaScript

Serialized Object Notation - Ký pháp đối tượng JavaScript tuần tự), khiến nó dễ

dàng tạo, cập nhật, xóa, truy vấn, và dĩ nhiên - xem các tài liệu JSON. Bởi DDP là

một giao thức nguồn mở, bạn có thể hình dung ra việc kết nối nó tới bất kỳ máy

khách hoặc nguồn dữ liệu nào bạn muốn. Nó có thể hoạt động ngay lập tức cùng với

MongoDB.

Trong thực tế, Meteor cung cấp hai cơ sở dữ liệu MongoDB: một cơ sở dữ liệu đệm

ở phía máy khách và một cơ sở dữ liệu MongoDB trên máy chủ. Khi người dùng

tạo ra một thay đổi đến một vùng dữ liệu - Ví dụ như nhấn nút Lưu (Save) - mã

JavaScript chạy trên trình duyệt cập nhật các mục trong cơ sở dữ liệu MongoDB nội

tại tương ứng và tạo ra một yêu cầu DDP tới máy chủ. Đoạn mã ngay lập tức được

xử lý như thể là đã thành cơng bởi vì nó khơng cần chờ đợi để máy chủ trả lời.

Trong khi đó, máy chủ âm thầm cập nhật dữ liệu. Nếu thao tác ở phía máy chủ thất

bại hoặc trả về một kết quả khơng mong muốn, mã JavaScript ở phía máy khách

ngay lập tức được điều chỉnh lại dựa vào dữ liệu vừa được trả về từ máy chủ. Sự



17



điều chỉnh này được gọi là bồi hoàn trễ - latency compensation và tạo thêm cảm

nhận về tốc độ cho người dùng.

Mặc dù hệ thống khuôn mẫu của Meteor được thiết kế một cách rõ ràng

để dễ dàng tạo ra sự giao tiếp theo thời gian thực. Trong hầu hết các khung

cộng tác web, bạn có thể dễ dàng trộn lẫn HTML (Ngơn ngữ đánh dấu văn

bản siêu liên kết - Hypertext Markup Language)—hoặc tương đương với

HTML, ví dụ như HTML Abstraction Markup Language (Haml)—với mã

nguồn. Điều này cho phép bạn dễ dàng chèn các giá trị động từ cơ sở dữ liệu

vào các trang mà bạn gửi cho người sử dụng. Sau đó, bạn có trách nhiệm đặt

một hệ thống tại chỗ để giám sát các sự thay đổi trên dữ liệu và cập nhật các

đánh đấu của bạn. Tuy vậy, hệ thống khuôn mẫu trong Meteor được thiết kế

để ghi lại dữ liệu nào được truy cập từ một khuôn mẫu và tự động thiết lập

các lời gọi lại để thay đổi HTML khi mà dữ liệu bên dưới thay đổi, khiến

cho các khn mẫu thời gian thực nhanh chóng và dễ dàng.

2.3.2.2 Ưu và nhược điểm của meteor

-



Ưu điểm





Khơng cần q nhiều kiến thức lập trình, chỉ cần HTML, CSS, javascript,

chút kiến thức về OOP và database là được. Mọi thao tác tới database đều

thông qua các API của Meteor, viết bằng Javascript.







Meteor hướng tới các đối tượng khơng giỏi lập trình. Do đó, Meteor rất dễ

học dễ làm, tài liệu về Meteor cũng rất phong phú và dễ tìm.







Nhanh chóng tạo ra sản phẩm, được các công ty start-up, các doanh nghiệp

nhỏ ưu chuộng (Ngày xưa Ruby on Rail cũng nổi tiếng nhờ lý do này).







Có vơ số module đã viết sẵn, chỉ cần gắn vào và sử dụng. Ví dụ việc đăng

nhập, phân quyền khá phức tạp trong C#, Java, … trong Meteor chỉ cần gắn

module vào, chỉnh sửa một chút là được.







Dân Developer cũng thích Meteor, vì nó tích hợp đủ thứ cơng nghệ: Node.js,

Express, MongoDB, WebSocket, Phonegap và realtime.



18







Code ít, được nhiều, Deploy rất nhanh. Vừa code xong và muốn đưa lên web,

chỉ cần “meteor deploy hoangph.meteor.com”. Muốn có ứng dụng di động,

chỉ cần “meteor build android” là xong.



-



Nhược điểm:





Chỉ mới hỗ trợ MongoDB làm Database Engine.







View Engine Blaze hơi khó sử dụng. Hiện tại ta có thể thay thế bằng

AngularJS.







SEO cũng chưa tốt, do Meteor tập trung vào phát triển ứng dụng real time,

tương tác cao. Nếu cần làm web bán hàng, blog, trang tin tức, PHP & Joomla

hay WordPress vẫn là lựa chọn hàng đầu nhé.







Module nhiều nhưng document khơng rõ ràng (Tình trạng tương tự như npm

của Nodejs, có rất nhiều module nhưng document rất mơ hồ, khó sử dụng).



2.3.2.3 Cấu trúc của một project meteor

a. Giới thiệu về import và export:

Meteor ở phiên bản 1.3 xuất hiện các trường export và import cho phép truy xuất

các file javascript, file css và file html một cách là khá dễ dàng.

-



Import file thông thường:

import '../../api/lists/methods.js'; // import from relative path

import '/imports/startup/client'; // import module with index.js from

absolute path

import './loading.html';

relative path

import '/imports/ui/style.css';



-



// import Blaze compiled HTML from

// import CSS from absolute path



Import từ packages:

import moment from 'moment';

// default import from npm

import { HTTP } from 'meteor/http'; // named import from Atmosphere



-



Sử dụng require (tương tự như import):

if (Meteor.isClient) {

require('./client-only-file.js');

}



Export:



19



export const listRenderHold = LaunchScreen.hold(); // named export

export { Todos };

// named export

export default Lists;

// default export

export default new Collection('lists');

// default export



b. Cấu trúc file:

imports/

startup/



#Thư mục chứa các file thiết lập khi ứng dụng khởi chạy



client/



#Thư mục chứa những thiết lập phía client



index.js



#File chứa các thiết lập chính cho client



routes.js



#File thiết lập tất cả các routes của hệ thống



useraccounts-configuration.js #File thiết lập user account

server/

fixtures.js



#File thêm vào database một số dữ liệu nền khi ứng dụng



khởi chạy

index.js

api/



#File import server startup through a single index entry point

#Thư mục chứa các collection của ứng dụng



lists/



# a unit of domain logic



server/

publications.js



# all list-related publications



publications.tests.js # tests for the list publications

lists.js



# definition of the Lists collection



lists.tests.js



# tests for the behavior of that collection



methods.js



# methods related to lists



methods.tests.js



# tests for those methods



ui/

components/



# thư mục chứa các component tương ứng với các chức năng



của

# ứng dụng các chức năng này có thể lồng vào nhau thông qua

import

layouts/



# wrapper components for behaviour and visuals



20



pages/

client/



# entry points for rendering used by the router

# Phía client



main.js

server/



# tất cả chức năng phía client sẽ được import vào đây

# Phía server



main.js



# tất cả chức năng phía server sẽ được import vào đây



2.3.2.4 Một số package meteor được sử dụng

-



Dotansimha:accounts-ui-angular





Một package của angular cung cấp dịch vụ đăng ký đăng nhập và xác thực

người dùng trong hệ thống.





-



Để cài đặt gõ lệnh: meteor add dotansimha:accounts-ui-angular.



Accounts-facebook





Cung cấp dịch vụ đăng nhập thơng qua tài khoản facebook bằng cách liên kết

với một ứng dụng facebook.





-



-



Để cài đặt gõ lệnh: meteor add accounts-facebook.



Accounts-google:





Tương tự accounts-facebook đối với tài khoản google.







Để cài đặt gõ lệnh: meteor add accounts-google.



Email:





Cung cấp dịch vụ gửi mail thơng qua một tài khoản email được liên kết với

ứng dụng.





-



Để cài đặt gõ lệnh: meteor add email.



Session:





Cung cấp dịch vụ lưu trữ dữ liệu tạm thời, sử dụng để lưu trữ và chuyền giữ

liệu giữa các trang và các module.







Để cài đặt gõ lệnh: meteor add session



2.3.3 Tìm hiểu về MongoDB

2.3.3.1 Cơ sở dữ liệu NoSQL là gì?

NoSQL thường được hiểu là Not Only SQL một dạng cơ sở dữ liệu

cung cấp cơ chế lưu trữ và truy xuất dữ liệu theo mơ hình khác với các cơ



21



sở dữ liệu quan hệ. NoSQL được đánh giá là có phương thức tiếp cận thiết

kế đơn giản, dễ dàng mở rộng ngang và có độ sẵn sàng đáp ứng cao, dễ

dàng kiểm sốt. Cấu trúc dữ liệu của NoSQL được lưu trữ dưới dạng: keyvalue, document hoặc graph khác với cách lưu trữ mà các RDBMS đang sử

dụng hiện nay. Tính chất lưu trữ đơn giản, khơng ràng buộc vì vậy hiệu suất

hoạt động của NoSQL nhanh hơn RDBMS rất nhiều.

Được gọi là Not Only SQL có ý nghĩa những cơ sở dữ liệu thuộc họ

NoSQL khơng những có thể hỗ trợ các truy vấn giống như SQL mà có thể

làm được nhiều hơn thế. Hiện nay NoSQL đang được phát triển với tốc độ

nhanh, được ứng dụng vào nhiều dự án Big Data (dữ liệu lớn) và các ứng

dụng mạng xã hội yêu cầu đáp ứng thời gian thực.

Ngày nay, với sự phát triển của các ứng dụng Big Data mạng xã hội,

yêu cầu đòi hỏi xử lý một lượng dữ liệu vơ cùng lớn, tăng lên nhanh chóng

hàng ngày. Vì vậy mà NoSQL trở thành một cơ sở dữ liệu không thể thiếu

để giải quyết những bài tốn như vậy. Ví dụ như Facebook sử dụng NoSQL

kết hợp với RDBMS để lưu trữ hàng tỷ bài viết và bình luận đáp ứng hơn 1

tỷ thành viên sử dụng dịch vụ mà vẫn ln hoạt động ổn định, tính sẵn sàng

cao và khả năng phân tán dữ liệu vô tận.

2.3.3.2 Giới thiệu về MongoDB :

MongoDB là một cơ sở dữ liệu mã nguồn mở thuộc họ nhà NoSQL được

phát hành sử dụng miễn phí bởi cơng ty MongoDB. Với những ý tưởng lưu trữ mới.

MongoDB hoạt động trên mọi hệ điều hành phổ biến hiện nay như: Windows,

Linux, OS X và hỗ trợ đầy đủ các driver cho các ngôn ngữ lập trình để giao tiếp với

chúng một cách dễ dàng nhất.

Mỗi một table (bảng dữ liệu) trong SQL sử dụng thì trong MongoDB gọi là

collection (tập hợp). Mỗi một record (bản ghi) trong MongoDB được gọi là

document (tài liệu)

a. Một bản ghi của Mongodb được lưu trữ như thế nào?



22



Một bản ghi của MongoDB được lưu trữ dưới dạng document (tài liệu), nó được ghi

xuống với cấu trúc field (trường) và value (giá trị). Nó giống như là một đối

tượng JSON có dạng như sau:



Hình 2-1. Cách MongoDB lưu trữ một bản ghi.

Điều đó giúp bạn có thể dễ dàng ép kiểu sang array (mảng) để lập trình các ứng

dụng một cách dễ dàng hơn. Nói một cách dễ hiểu thì mỗi một bản ghi của

MongoDB là một mảng dữ liệu riêng biệt bao gồm các cặp key, value khác nhau do

đó cách lưu trữ của MongoDB là phi cấu trúc dữ liệu.

b. Mongodb hoạt động như thế nào?

MongoDB hoạt động dưới một tiến trình ngầm service ln mở một cổng (Cổng

mặc định là 27017) để lắng nghe các yêu cầu truy vấn, thao tác từ các ứng dụng gửi

vào sau đó mới tiến hành xử lý.

Mỗi một bản ghi của MongoDB được tự động gắn thêm một field có tên “_id” thuộc

kiểu dữ liệu ObjectId mà nó quy định để xác định được tính duy nhất của bản ghi này

so với bản ghi khác, cũng như phục vụ các thao tác tìm kiếm và truy vấn thơng tin về

sau.

Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc độ truy vấn

thông tin đạt hiệu suất cao nhất.

Mỗi khi có một truy vấn dữ liệu, bản ghi được cache (ghi đệm) lên bộ nhớ RAM, để

phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không cần phải đọc từ ổ cứng.

Khi có yêu cầu thêm/sửa/xóa bản ghi, để đảm bảo hiệu suất của ứng dụng mặc định

MongoDB sẽ chưa cập nhật xuống ổ cứng ngay, mà sau 60 giây MongoDB mới

thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ cứng.



23



2.3.3.3 Cơ chế phân quyền và bảo mật của MongoDB:

Cũng như các hệ cơ sở dữ liệu thông thường khác, MongoDB cũng có cơ chế xác

thực phân quyền và bảo mật linh hoạt để quản trị viên có thể cấp phát quyền thao

tác với cơ sở dữ liệu một cách đơn giản nhất.

MongoDB có thể truy cập mà khơng cần xác thực khi bạn tắt chế độ xác thực quyền

sở hữu với cơ sở dữ liệu.

Mặc định MongoDB sẽ có một tài khoản có tên truy cập là “admin” có quyền hạn

cao nhất, có quyền thao tác với tất cả các cơ sở dữ liệu được tạo ra trên hệ thống.

-



Ưu điểm





Dữ liệu lưu trữ phi cấu trúc, khơng có tính ràng buộc, tồn vẹn nên tính sẵn

sàng cao, hiệu suất lớn và dễ dàng mở rộng lưu trữ.







Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổ cứng nên

tốc độ đọc và ghi cao.



-



Nhược điểm





Khơng ràng buộc, tồn vẹn nên khơng ứng dụng được cho các mơ hình giao

dịch u cầu độ chính xác cao.







Khơng có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng







Dữ liệu được caching, lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt

động yêu cầu một bộ nhớ RAM lớn.







Như đã giới thiệu ở trên, mọi thay đổi về dữ liệu mặc định đều chưa được ghi

xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân

mất điện đột xuất là rất cao.



2.3.3.4 So sánh với SQL

Bảng 3-1. Bảng so sánh đối tượng trong SQL và MongoDB.

Đối tượng SQL

Database

Table

Row

Column

Index

Khóa chính



Đối tượng Mongodb

Database

Collection

Document or BSON document

Field

Index

Khóa chính



24



Có thể sử dụng một hoặc nhiều trường Trong MongoDB, mã primary key tự

dữ liệu làm khóa chính



sinh và gán vào trường _id



Bảng 3-2. Bảng so sánh các câu lệnh cơ bản trong SQL và MongoDB.

Các câu lệnh SQL cơ bản

CREATE TABLE users (

id MEDIUMINT NOT NULL

AUTO_INCREMENT,

user_id Varchar(30),



Các câu lệnh Mongobd cơ bản

* Tạo mới một collection

db.createCollection("users")

* Hoặc có thể chỉ cần dùng lệnh insert

db.users.insert( {



age Number,



user_id: "abc123",



status char(1),



age: 55,



PRIMARY KEY (id)



status: "A"



)



})

db.users.createIndex( { user_id: 1 } )



CREATE INDEX idx_user_id_asc

ON users(user_id)

CREATE INDEX

idx_user_id_asc_age_desc

ON users(user_id, age DESC)

DROP TABLE users

INSERT INTO users(user_id,



db.users.createIndex( { user_id: 1, age:

-1 } )

db.users.drop()

db.users.insert(



age,

status)



{ user_id: "bcd001", age: 45, status:

"A" }



VALUES ("bcd001",



)



45, "A")

SELECT *



db.users.find()



FROM users

SELECT user_id, status



db.users.find(



FROM users



{ },

{ user_id: 1, status: 1, _id: 0 }



SELECT *



)

db.users.find(



25



FROM users

WHERE status != "A"

SELECT user_id, status



{ status: "A" }

)

db.users.find(



FROM users



{ status: "A" },



WHERE status = "A"



{ user_id: 1, status: 1, _id: 0 }



SELECT *



)

db.users.find(



FROM users

WHERE status = "A"

SELECT id,



{ status: "A" }

)

db.users.find(



user_id,



{ },



status



{ user_id: 1, status: 1 }



FROM users

SELECT *



)

db.users.find(



FROM users



{ $or: [ { status: "A" } ,



WHERE status = "A"

AND age = 50

SELECT *



{ age: 50 } ] }

)

db.users.find(



FROM users



{ $or: [ { status: "A" } ,



WHERE status = "A"

OR age = 50

SELECT *



{ age: 50 } ] }

)

db.users.find(



FROM users

WHERE age > 25

SELECT *



{ age: { $gt: 25 } }

)

db.users.find(



FROM users

WHERE age < 25

SELECT *



{ age: { $lt: 25 } }

)

db.users.find(



FROM users



{ age: { $gt: 25, $lte: 50 } }



WHERE age > 25



)



AND age <= 50

SELECT *



db.users.find( { user_id: /bc/ } )



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

3 Công nghệ hỗ trợ

Tải bản đầy đủ ngay(0 tr)

×