3 Lợi ích của Avaya Proactive Outreach Manager

POM provides 3 benifits as following:


Increase revenue, reduce live agent costs, manage receivables, manage customer relationships proactively, retain existing customers and acquire new customers

  • High application productivity through maximum live connects
  • Advanced list management with customer segmentation
  • Utilize campaigns with media/resource escalations from low-cost emails to high-touch Predictive dialing such that right-party connects are achieved at the lowest costs

Improve efficiencies over outsourced business processes

  • Control campaign priorities and inbound queues


Contact maximum customers, reduce live agent costs, generate new/additional revenue, and report on your results

  • Improve agent productivity by proactively channeling customers to self-service
  • Maximize revenue through industry-leading call classification technology Simple and comprehensive real-time and historic reporting on business activities
  • Reliably comply with applicable regulations
  • Maximize operational efficiency with a robust and stable system

Comply with Do-Not-Call regulations by utilizing (DNC) list management features of the
application and guard time protection

Comply with applicable regulations by recording the calls where live agents speak to live customers

Increase agent administration efficiency by administering all agents through a single CC- Elite administration interface

Design complex campaigns including agent-less and agent-based outreach easily


Meets business group’s objectives, fits well with your existing infrastructure and can grow to meet your evolving needs

  • Integrated solution from Avaya, integrating with AAEP/CC-Elite/Avaya WFO for Call Recording

Highly secure and reliable solution with low maintenance costs

  • Low downtime and low maintenance cost to reduce total cost of ownership
  • Customer data is protected within the database with role-based access only

Vendor provides end-to-end professional services during installation as well as throughout the life of the solution

  • Avaya APS and authorized business partners for end-to-end management of the implementation globally
  • Avaya Global Support Services (GSS) and authorized business partners for
    maintenance and support globally


Mikrotik 01 – Cài đặt Mikrotik

MikroTik RouterOS là hệ điều hành dùng cho phần cứng RouterBOARD của MikroTik. Tuy nhiên, điều tuyệt vời là RouterOS có thể cài đặt trên một máy tính bình thường để biến máy tính đó thành một con router tích hợp rất nhiều chức năng như: routing, firewall, bandwidth management, wireless access point, backhaul link, hotspot gateway, VPN server…

Major features:

  • Powerful QoS control
  • P2P traffic filtering
  • High availability with VRRP
  • Bonding of Interfaces
  • Improved interface
  • Smaller and Less resource-hungry
  • Tons of other new features
  • Advanced Quality of Service
  • Stateful firewall, tunnels
  • STP bridging with filtering
  • High speed 802.11a/b/g wireless with WEP/WPA
  • WDS and Virtual AP
  • HotSpot for Plug-and-Play access
  • RIP, OSPF, BGP, MPLS routing
  • remote WinBox GUI and Web admin
  • telnet/mac-telnet/ssh/console admin
  • real-time configuration and monitoring
  • Nv2 wireless TDMA support
  • Nstreme wireless protocol
  • 3G/LTE support
  • 802.11a/b/g/n
  • WPA2 full support
  • OpenFlow support

Hardware Support

  • i386 compatible architecture
  • SMP – multi-core and multi-CPU compatible
  • Minimum 32MB of RAM (maximum supported 2GB, except on Cloud Core devices, where there is no maximum)
  • IDE, SATA, USB and flash storage medium with minimum of 64MB space
  • Network cards supported by linux v3.3.5 kernel (PCI, PCI-X)
  • Partial hardware compatibility list (user maintained)
  • Switch chip configuration support



Hoặc link trực tiếp download Mikrotik phiên bản 6: http://download2.mikrotik.com/routeros/6.23.1/mikrotik-6.23.1.iso


Reboot nhớ là eject đĩa ảo. Account mặc định: admin/ password trống.

Nó báo license 😀




Cài đặt phpmoadmin quản trị MongoDB trên nền web

Bước 1: Cài đặt Mongo extension cho PHP

apt-get install php5-dev php5-cli php-pear
pecl install mongo

=> Cài đặt mongo extension cho PHP (Cần có php-pear)

Hoặc có thể cài gói: php5-mongo

Nhớ sau đó restart lại web server: service apache2 restart

Bước 2: Chỉnh sửa php.ini

/etc/php5/apache2/php.ini http://docs.mongodb.org/ecosystem/drivers/php/


Bước 3: Tải file phpmoadmin tại phpmoadmin.com

Bỏ vào web server chạy php của bạn.

Bước 4: Chạy thành quả localhost/moadmin.php




30 lệnh thao tác với MongoDB

1. Kiểm tra phiên bản sử dụng MongoDB


Lệnh này cũng giúp bạn vào dấu nhắc lệnh bắt đầu thao tác với MongoDB. Lệnh này kết nối mặc định với localhost và port 27017. Nếu bạn muốn đặc tả rõ ràng sử dụng lệnh: mongo –port 123 –host

2. Show tất cả db

show dbs

3. Chuyển sang 1 db mới (mydb)

use mydb

4. Kiểm tra DB đang thao tác


5. Thêm một collection testData vào DB

> j={name:”mongo”}
{ “name” : “mongo” }
> k={x:3}
{ “x” : 3 }

Khi này MongoDB mới thực sự tạo DB mydb.

6. Show toàn bảng trong MongoDB


Ta có thể đặc tả rõ hơn câu tìm kiếm: db.testData.find({x:3})

Giới hạn số lượng record trả về: db.testData().limit(3)

7. CRUD với MongoDB

Thêm Insert (Create)

Thêm 1 mảng:

var mydocuments =
        item: "ABC2",
        details: { model: "14Q3", manufacturer: "M1 Corporation" },
        stock: [ { size: "M", qty: 50 } ],
        category: "clothing"
        item: "MNO2",
        details: { model: "14Q3", manufacturer: "ABC Company" },
        stock: [ { size: "S", qty: 5 }, { size: "M", qty: 5 }, { size: "L", qty: 1 } ],
        category: "clothing"
db.inventory.insert( mydocuments );

Đọc từ Mongo (READ)

Sử dụng lệnh: db.collection.find()

Có thể sử dụng toán tử lọc: db.collection.find({<field>:<value>})

db.inventory.find( { type: { $in: [ 'food', 'snacks' ] } } )

=> Lấy tất cả loại có giá trị là food hoặc snacks.

Có sự khác biệt giữa toán tử $in (giá trị) và $or (biểu thức)

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
=> Lựa chọn sp có số lượng <20 hoặc giá = 10.
db.inventory.find( { type: 'food', price: { $lt: 9.95 } } )
=> Toán tử AND: loại food và giá nhỏ hơn 9.95
     type: 'food',
     $or: [ { qty: { $gt: 100 } }, { price: { $lt: 9.95 } } ]

So sánh đúng:

          company: 'ABC123',
          address: '123 Street'

So sánh chứa trong (include text)

db.inventory.find( { 'producer.company': 'ABC123' } )
=> Lựa chọn field producer có chứa field company và giá trị là ABC123

Query từ 1 mảng:

{ _id: 5, type: "food", item: "aaa", ratings: [ 5, 8, 9 ] }
{ _id: 6, type: "food", item: "bbb", ratings: [ 5, 9 ] }
{ _id: 7, type: "food", item: "ccc", ratings: [ 9, 5, 8 ] }
db.inventory.find( { ratings: [ 5, 8, 9 ] } )
=> Lấy chính xác trả về đúng item aaa
db.inventory.find( { ratings: 5 } )
=>Trả về tất cả sp có rating bằng 5
db.inventory.find( { 'ratings.0': 5 } )
=> Trả về sp có rating là 5 và ở vị trí đầu tiên. Trả về aaa và bbb
db.inventory.find( { ratings: { $elemMatch: { $gt: 5, $lt: 9 } } } )
=> Trả về sp có rating lớn hơn 5 và nhỏ hơn 9. Sử dụng toán tử $elemMatch.
Trả về aaa và ccc vì có phần tử 8 (5<8<9)
db.inventory.find( { ratings: { $gt: 5, $lt: 9 } } )

=> trả về cả 3 sp.

Xem thêm tại: http://docs.mongodb.org/manual/tutorial/query-documents/

Sửa update()

    { item: "MNO2" },
      $set: {
        category: "apparel",
        details: { model: "14Q3", manufacturer: "XYZ Company" }
      $currentDate: { lastModified: true }
=> điều kiện item==MNO2
Toán tử $set: thiết lập các thay đổi.
Toán tử $currentDate có cập nhật ngày sửa bản tin.

  { item: "ABC1" },
  { $set: { "details.model": "14Q2" } }
=> Cập nhật filed model chứa trong field details
   { category: "clothing" },
     $set: { category: "apparel" },
     $currentDate: { lastModified: true }
   { multi: true }
=> Cập nhật nhiều document (row) với catalogry là clothing thành apparel.

Mặc định lệnh update sẽ cập nhật sửa đổi cho document nhưng nếu ko tìm thấy match nó sẽ không làm gì. Trong MongoDB bạn có tùy chọn upsert: true => điều này có nghĩa nếu ko tìm thấy bản tin nào thỏa để sửa đổi, lệnh này sẽ insert bản tin này vào.

   { item: "TBD1" },
     item: "TBD1",
     details: { "model" : "14Q4", "manufacturer" : "ABC Company" },
     stock: [ { "size" : "S", "qty" : 25 } ],
     category: "houseware"
   { upsert: true }

Xem thêm tại: http://docs.mongodb.org/manual/tutorial/modify-documents/

Delete remove()

=> Xóa tất cả các record (document)
db.inventory.remove( { type : "food" } )
=> Xóa tất cả các record có type == food
db.inventory.remove( { type : "food" }, 1 )
=> remove 1 document có type==food





Vận hành cơ bản MongoDB trên Ubuntu Linux Mint

1. Khởi động / dừng MongoDB

command: service mongod start | stop | restart

2. Kiểm tra log MongoDB

File: /var/log/mongodb/mongod.log

[initandlisten] waiting for connections on port <port>

Port mặc định của MongoDB là 27017. Bạn có thể cấu hình lại port này trong file /etc/mongod.conf

If you change the user that runs the MongoDB process, you must modify the access control rights to the /var/lib/mongodb and /var/log/mongodb directories to give this users access to these directories.

Hướng dẫn cài đặt MongoDB trên Ubuntu Linux Mint

Bước 1: Import key

Command: apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –rec7F0CEB10

Bước 2: Tạo list file cho MongoDB

Command: echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ | sudo tee /etc/apt/sources.list.d/mongodb.list

Bước 3: Cập nhật Repo

Command: sudo apt-get update

Bước 4: Cài đặt MongoDB

Command: apt-get install -y mongodb-org

Các gói được cài: mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools

0 upgraded, 5 newly installed, 0 to remove and 23 not upgraded.
Need to get 114 MB of archives.

Tham khảo: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

Cài đặt phụ thuộc: apt-get install gcc make build-essential


So sánh MongoDB và MySQL

MongoDB là một NoSQL database, MongoDB dẫn đầu bảng xếp hạng trong thời gian dài (là NoSQL database tốt nhất). MongoDB có rất nhiều người hâm mộ, rất nhiều trong số họ đã kinh ngạc với các tính năng ưa thích và tốc độ của nó. Và, câu hỏi ở đây được đặt ra không phải là quá stupid ở tất cả trường hợp, giống MongoDB đã promoted với tốc độ kinh ngạc và nêu ra cách MangoDB chạy nhanh và tốt hơn MySQL. Nhưng vẫn còn một điều, cuộc sống không hề đơn giản. ;D Hãy nhìn nhanh vào trong hoạt động nội bộ của các database engines này và trả lời câu hỏi.

MySQL xử lý các query như thế nào?
MySQL dựa trên khái niệm của một database khá cũ. Đó là lý do tại sao nó có một số vấn đề để nói. Khi bạn nghĩ về lịch sử của MySQL, nó có thể giải thích chi tiết lý do cách xây dựng như những gì bạn đã thấy. Qua đó có thể thấy rằng, MySQL cũng sử dụng các kỹ thuật hiện đại như sử dụng multiple threads để tăng hiệu suất, khi nhiều query cần được xử lý cùng một thời điểm, một số threads làm việc để xử lý các query song song với nhau. Nếu có một trường hợp high load (tải ở mức cao) với một lượng lớn query, MySQL xử lý cùng lúc một số query trong số chúng. Để tránh va chạm đối với các write query khác MySQL sử dụng một kỹ thuật gọi là locks để block các write query khác và bảo vệ các write query trên cùng một bản ghi(entry). Phụ thuộc vào storage engine bạn sử dụng, một cơ chế được gọi là row-locking có thể được sử dụng. Với row-locking, nếu một write query ở một row, cơ chế này sẽ block các query khác ghi dữ liệu vào cùng row đó cho đến khi quá trình ghi dữ liệu của query trước kết thúc. Cùng một thời điểm, các query khác vẫn có thể thay đổi, ghi dữ liệu ở các row khác trên cùng một table bằng một thread khác.

MongoDB xử lý các query như thế nào?
Khái niệm nội bộ của MongoDB hoàn toàn khác với MySQL. Để so sánh giữa chúng ở đây, tôi sẽ tập trung vào một điểm quan trọng, bỏ qua các điểm khác. Các query MongoDB không được xử lý song song cùng lúc. Tất cả các query tới MongoDB Server được đưa vào một hàng đợi, và server xử lý từng query một(tại thời điểm này, không có sự khác nhau nếu query được gửi tới cùng một collection [trong SQL là table], database hoặc không). MongoDB sử dụng một kỹ thuật gọi là instance-wide-locking. Điều này có nghĩa là, toàn bộ quá trình xử lý chỉ có thể chạy một query tại một thời điểm. Để loại bỏ một ít ‘nút cổ chai’, MongoDB đang chuyển sang database-wide-locks như đã đề cập trong release notes mới nhất.

Vậy điều này hàm ý gì? instance-wide-lock cho phép toàn bộ MongoDB Server để xử lý chỉ một write query ở cùng một thời điểm. database-wide-lock cho phép MongoDB Server xử lý chỉ một write query đối với mỗi database, nhưng có thể xử lý nhiều database cùng lúc. Điều này có thể khiến bạn cảm thấy thật khủng khiếp, nhưng có một điều bạn cần nhớ là các query trong MongoDB được xử lý nhanh hơn rất nhiều trong MySQL, và bạn sẽ thấy rằng nó không còn là vấn đề lớn. Tất nhiên, tất cả những điều nói ra ở đây chỉ có tác dụng nếu bạn thiết lập database một cách chính xác.

Làm thế nào so sánh MongoDB với MySQL?
Xét về hiệu xuất của một query đơn giản và duy nhất, MongoDB sẽ nhanh hơn rất nhiều MySQL. Trong kinh nghiệm của tôi, bạn có thể sẽ thấy được sự khác biệt trong các tình huống high load (tải ở mức cao) và một số trường hợp truy vấn phức tạp, hoặc đặc biệt. Trong MySQL, tất cả các quản trị dữ liệu đều hiểu tầm quan trọng của database indexes. So sánh với MangoDB có vẻ như hầu hết các quản trị viên không biết một cái gì tồn tại như indexes! Điều này bắt nguồn từ một thực tế, MongoDB là structureless database, tại sao tôi phải quan tâm indexes? Nhưng ở đây tôi muốn chỉ ra đây rằng việc sử dụng indexes thích hợp ít nhất cũng quan trọng như với các database engines khác.

ndexes trong MongoDB quan trọng như thế nào?
MongoDB sử dụng instance-wide-lock hoặc database-wide-lock đối với các write query. Nó có thể quan trọng hơn đối với việc thiết lập đúng đắn indexes trong MySQL. Để tôi cho bạn một ví dụ trong kinh nghiệm của tôi, và giả sử dụng chúng ta sử dụng instance-wide-locking.

Hình dung rằng bạn có một table với vài triệu bản ghi, mỗi bản ghi có một vài trường có dữ liệu dài và lớn trong cả MongoDB lẫn MySQL và không có định nghĩa indexes, nếu một truy vấn được thực hiện để update 100 bản ghi với điều kiện theo giá trị của một trường chỉ định. Điều gì sẽ xảy ra lúc này?

MySQL bắt đầu xử lý truy vấn trong một thread, và một tất nhiên là MySQL sẽ thực hiện ‘full table scan’ để tìm kiếm các bản ghi phù hợp với điều kiện trong vài triệu bản ghi. Và có thể truy vấn này sẽ mất chừng 20 phút để hoàn thành.

MongoDB sẽ xử lý cùng một truy vấn và chỉ mất chừng 5 phút. Nghe có vẻ rất tuyệt vời phải không? Trong thực tế, MongoDB Server đã scan toàn bộ collection (trong SQL là table) để tìm ra các bản ghi có liên quan. Như đã thảo luận lúc trước, trong 5 phút đó MangoDB sẽ block toàn bộ việc xử lý write query của cả server. Lúc này bạn còn thấy là 5 phút có phải là nhanh? Và MongoDB tốt hơn bởi vì nó nhanh hơn?

Thời gian thực thi một truy vấn đơn lẻ so với tác động tổng thể trên hệ thống là 2 việc khác nhau hoàn toàn. MySQL vẫn xử lý các write query khác gửi đến server, thậm chí trên cùng một database hoặc cùng một table. Trong khi Server đang bận rộn với ‘quey tốn thời gian’, tài nguyên được sử dụng và không được giải phóng cho các truy vấn khác, những truy vấn khác có thể chạy chậm hơn nhưng chúng vẫn được xử lý.

Trong 5 phút xử lý query trong MongoDB, instance-wide-lock được active sẽ dẫn đến tất cả các truy vấn khác phải xếp hàng đợi, không có ngoại lệ nào ở đây. Tất cả các truy vấn phải chờ cho việc xử lý xong, và các query trong hàng đợi được xử lý từng cái một. Điều này vẫn còn đúng khi kết nối cơ bản đã bị ngắt do timeout hoặc một vài lý do khác. Với thời gian thực hiện truy vấn dài, như ví dụ trên đối với một truy vấn, một đoạn mã PHP hay Python đã timeout và kết thúc. Đối với các ứng dụng web, trình duyệt có timeout ngắn và sẽ ngắt kết nối đến server. Như đã đề cập, truy vấn được xếp hàng đợi ngay cả khi kết nối đã closed, và các truy vấn vẫn tiếp tục được xử lý theo thứ tự.

Trên cả 2 hệ thống MongoDB và MySQL, nếu định nghĩa đúng indexes sẽ làm giảm thời gian truy vấn rất nhiều.

Kết luận
Ngay cả khi MongoDB thực hiện các truy vấn đơn giản và duy nhất nhanh hơn rất nhiều MySQL, nhưng không có nghĩa là nó sẽ nhanh ở mọi trường hợp, ngay cả một structure-less databases như thế này cũng cần có một vài cách tổ chức, định nghĩa các indexes là nhiệm vụ quan trọng, thiếu indexes có thể gây ra các tác động lớn ngay cả khi thời gian thực hiện truy vấn nhanh hơn nhiều MySQL.

MongoDB development road map cho thấy, vấn đề được mô tả là một vài thứ mà các nhà phát triển nhận thức được, chuyển từ instance-wide-locking sang database-wide-locking là một bước tiến lớn và đúng đắn. Hi vọng rằng các tính năng hữu ích sẽ sớm được ra mắt.

Tóm lại MongoDB

– Ưu điểm
o Tốc độ nhanh
o Lưu trữ và biểu diễn dữ liệu dưới dạng document.
o Khả năng mở rộng cao
o Tính đáp ứng cao
– Nhược điểm
o Không toàn vẹn dữ liệu
o Tốn tài nguyên hệ thống.

So sánh tải của MongoDB và MySQL: http://www.moredevs.ro/mysql-vs-mongodb-performance-benchmark/

mongoDB – Giới thiệu về mongoDB

1. MongoDB và NoSQL là gì?

NoSQL ra đời năm 1998 bởi Carlo Strozzi khi ông lập mới một hệ cơ sở dữ liệu quan hệ mã nguồn mở nhanh và nhẹ không liên quan đến SQL Vào năm 2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ NoSQL khi Johan Oskarsson của Last.fm muốn tổ chức một hội thảo về cơ sở dữ liệu nguồn mở phân tán. Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ CSDL mới: phân tán (distributed) + không ràng buộc (non-relational).

NoSQL nghĩa là Non SQL hay cũng có thể gọi là Not only SQL. Hiểu một cách đơn giản nhất thì NoSQL là một hệ cơ sở dữ liệu không sử dụng mô hình quan hệ như các hệ quản trị cơ sở phổ biến khác hiện nay như là MySQL hay SQL server.

Khi các hệ thống lớn ra đời, sự mở rộng về mặt quy mô cũng như tốc độ truy suất trở nên cần thiết hơn bao giờ hết. Cơ sở dữ liệu quan hệ khó có khả năng giải quyết triệt để những vấn đề này. Chính vì thế NoSQL ra đời nhằm khắc phục những vấn đề trên.

Có khá nhiều rất nhiều hệ thống sử dụng NoSQL như facebook thì có cassandra, google thì có bigtable. Tuy nhiên ở đây tôi xin giới thiệu về MongoDB. Bởi lẻ MongoDB miễn phí, dễ sử dụng, dễ cài đặt và hỗ trợ rất nhiều driver cho các ngôn ngữ lập trình phổ biến hiện nay.

2. Đặc điểm MongoDB

  • NoSQL lưu trữ dữ liệu của mình theo dạng cặp giá trị “key – value”. Sử dụng số lượng lớn các node để lưu trữ thông tin – Mô hình phân tán dưới sự kiểm soát phần mềm
  • Chấp nhận dữ liệu bị trùng lặp do một số node sẽ lưu cùng thông tin giống nhau
  • Một truy vấn sẽ được gửi tới nhiều máy cùng lúc, do đó khi một máy nào đó không phục vụ được sẽ không ảnh hưởng lắm đến chất lượng trả về kết quả
  • Phi quan hệ – không có ràng buộc nào cho việc nhất quán dữ liệu
  • Tính nhất quán không theo thời gian thực: Sau mỗi thay đổi CSDL, không cần tác động ngay đến tất cả các CSDL liên quan mà được lan truyền theo thời gian.

Thay cho việc lưu trữ dữ liệu vào các bảng có quan hệ với nhau như truyền thống, MongoDB lưu các dữ liệu cấu trúc dưới dạng giống với JSON(JavaScript Object Notation) và gọi tên là BSON. Dự án được bắt đầu triển khai vào tháng 10 năm 2007 bởi 10gen trong khi công ty này đang xây dựng một nền tảng như là dịch vụ (Platform as a Service) giống như Google App Engine. Phải đến năm 2009, dự án này được tách độc lập. Hệ thống có thể chạy trên Windows, Linux, OS X và Solaris. Nó được một số tổ chức sử dụng trong thực tế như:

  • Caigslist : Công ty làm việc trong lịch vực môi giới quảng cáo trên các website khác (giống adMicro của Việt Nam). MongoDB giúp cho công ty này quản lý hàng tỉ các bản ghi quảng cáo thuận tiện và nhanh chóng.
  • Foursquare là một mạng xã hội gắn các thông tin địa lý. Công ty này cần lưu dữ liệu của rất rất nhiều vị trí của các địa điểm như quán cafe, nhà hàng, điểm giải trí, lịch sử, … và ghi lại những nơi mà người sử dụng đã đi qua.
  • CERN : Trung tâm nghiên cứu năng lượng nguyên tử của Châu Âu, sử dụng MongoDB để lưu trữ lại các kết quả, dữ liệu thí nghiệm của mình. Đây là một lượng dữ liệu khổng lồ sẽ dùng để sử dụng trong tương lai.
  • MTV Networks, Disney Interactive Media Group, bit.ly, The New York Times, The Guardian, SourceForge, Barclays, …

3. Điểm mạnh MongoDB

  • Dễ học, có một số nét khá giống với CSDL quan hệ – Quản lý bằng command line hoặc bằng GUI như RockMongo hoặc phpMyAdmin
  • Linh động, không cần phải định nghĩa cấu trúc dữ liệu trước khi tiến hành lưu trữ nó -> rất tốt khi ta cần làm việc với các dạng dữ liệu không có cấu trúc.
  • Khả năng mở rộng tốt (distributed horizontally), khả năng cân bằng tải cao, tích hợp các công nghệ quản lý dữ liệu vẫn tốt khi kích thước và thông lượng trao đổi dữ liệu tăng.
  • Miễn phí

4. Kiến trúc MongoDB

Một MongoDB Server sẽ chứa nhiều database. Mỗi database lại chứa một hoặc nhiều colection. Đây là một tập các documnents, về mặt logic thì chúng gần tương tự như các table trong CSDL quan hệ. Tuy nhiên, điểm hay ở đây là ta không cần phải định nghĩa trước cấu trúc của dữ liệu trước khi thao tác thêm, sửa dữ liệu… Một document là một đơn vị dữ liệu – một bản ghi (không lớn hơn 16MB). Mỗi chúng lại chứa một tập các trước hoặc các cặp key – value. Key là một chuỗi ký tự, dùng để truy xuất giá trị dạng : string, integer, double, … Dưới đây là một ví dụ về MongoDB document

_id : ObjectId("4db31fa0ba3aba54146d851a"),
username : "joegunchy",
email : "[email protected]",
age : 26,
is_admin : true,
created : "Sun Apr 24 2011 01:52:58 GMT+0700 (BDST)"

Cấu trúc có vẻ khá giống JSON, tuy nhiên, khi lưu trữ document này ra database, MongoDB sẽ serialize dữ liệu thành một dạng mã hóa nhị phân đặc biệt – BSON. Ưu điểm của BSON là hiệu quả hơn các dạng format trung gian như XML hay JSON cả hệ tiêu thụ bộ nhớ lẫn hiệu năng xử lý. BSON hỗ trợ toàn bộ dạng dữ liệu mà JSON hỗ trợ (string, integer, double, Boolean, array, object, null) và thêm một số dạng dữ liệu đặc biệt như regular expression, object ID, date, binary, code.



Sharding là cơ chế tự động của MongoDB dùng để chia tách một dữ liệu kích thước lớn cho rất nhiều server (thường gọi là cluster). Sharding được thiết kế để phục vụ 3 mục điêu cơ bản sau

Làm cho cluster “trong suốt” với người dùng: Để hoàn thành nhiệm vụ này, MongoDB sử dụng một quá trình routing đặc biết gọi là mongos. Mongos đứng trước cluster, đóng vai trò điều phối việc truy cập đến shard nào, trả dữ liệu từ shard nào ra. Nó chuyển tiếp các request tới các server khác có tài nguyên hoặc đến cluster đằng sau nó. Sau đó lắp ráp lại, và gửi các response lại về cho các client. Do đó, các client không cần biết rằng chúng đang giao tiếp với cluster nào thật sự mà chỉ biết rằng mình đang kết nối tới một server bình thường. Đây gọi là tính “trong suốt” với người sử dụng

Làm cho cluster luôn sẵn sàng để đọc hoặc ghi: Một cluster còn tồn tại phải đảm bảo được rằng nó luôn sẵn sàng. Mỗi phần con trong cluster sẽ có ít nhất một vài tiến trình phục vụ dự bị trên máy khác.

Làm cho cluster phát triển “tự nhiên”: Bất cứ khi nào người dùng cần thêm dung lượng, họ có thể thêm một cách dễ dàng Mỗi cluster khi được quản lý lại “thể hiện” như một node riêng lẻ và dễ dàng config.


Nếu có nhiều shard đang sẵn sàng và có thêm chứa thêm dữ liệu, MongoDB sẽ tiến hành chuyển dữ liệu từ các shard khác sang để cân bằng tải. Cách thức tiến hành là di chuyển các chunk từ shard này sang shard khác một cách tự động. Balancing cũng có thể bị tắt hoặc bật nếu admin muốn Balancing cũng không được đảm bảo ngay tức thì, chúng ta hãy xem ví dụ dưới đây

Tham khảo: http://bigsonata.com/mongodb/


nodejs – Viết ứng dụng chat đơn giản

Bước 1: cài đặt gói phụ thuộc

Tham khảo thêm tại https://vneconomics.com/nodejs-cai-dat-nodejs-nmp-va-package-tren-ubuntu-linux-mint/

Cài gói socket.io: apt-get install socket.io (Tại thư mục gốc của app)

Bước 2: Tạo dịch vụ server.js

var io = require(‘socket.io’).listen(8000);

// open the socket connection
io.sockets.on(‘connection’, function (socket) {

// listen for the chat even. and will recieve
// data from the sender.
socket.on(‘chat’, function (data) {

// default value of the name of the sender.
var sender = ‘unregistered’;

// get the name of the sender
socket.get(‘nickname’, function (err, name) {
console.log(‘Chat message by ‘, name);
console.log(‘error ‘, err);
sender = name;

// broadcast data recieved from the sender
// to others who are connected, but not
// from the original sender.
socket.broadcast.emit(‘chat’, {
msg : data,
msgr : sender

// listen for user registrations
// then set the socket nickname to
socket.on(‘register’, function (name) {

// make a nickname paramater for this socket
// and then set its value to the name recieved
// from the register even above. and then run
// the function that follows inside it.
socket.set(‘nickname’, name, function () {

// this kind of emit will send to all! 😀
io.sockets.emit(‘chat’, {
msg : “naay nag apil2! si ” + name + ‘!’,
msgr : “mr. server”


Bước 3: Tạo ứng dụng client – index.php

<script src=”http://localhost:8000/socket.io/socket.io.js”></script>
<script src=”http://code.jquery.com/jquery-1.6.2.min.js”></script>
var name = ”;
var socket = io.connect(‘http://localhost:8000’);

// at document read (runs only ones).
// on click of the button (jquery thing)
// the things inside this clause happen only when
// the button is clicked.

// just some simple logging
$(“p#log”).html(‘sent message: ‘ + $(“input#msg”).val());

// send message on inputbox to server
socket.emit(‘chat’, $(“input#msg”).val() );

// the server will recieve the message,
// then maybe do some processing, then it will
// broadcast it again. however, it will not
// send it to the original sender. the sender
// will be the browser that sends the msg.
// other browsers listening to the server will
// recieve the emitted message. therefore we will
// need to manually print this msg for the sender.
$(“p#data_recieved”).append(“<br />\r\n” + name + ‘: ‘ + $(“input#msg”).val());

// then we empty the text on the input box.

// ask for the name of the user, ask again if no name.
while (name == ”) {
name = prompt(“What’s your name?”,””);

// send the name to the server, and the server’s
// register wait will recieve this.
socket.emit(‘register’, name );

// listen for chat event and recieve data
socket.on(‘chat’, function (data) {

// print data (jquery thing)
$(“p#data_recieved”).append(“<br />\r\n” + data.msgr + ‘: ‘ + data.msg);

// we log this event for fun 😀
$(“p#log”).html(‘got message: ‘ + data.msg);

<input type=”text” id=”msg”></input><button>Click me</button>
<p id=”log”></p>
<p id=”data_recieved”></p>

Bước 4: Chạy dịch vụ tại server.js

Command: nodejs server.js

Lưu ý check quyền thực thi cho file server.js

Nguồn: https://code.google.com/p/nodejs-win/wiki/SimpleChatSystem

Tested: http://www.codeproject.com/Articles/777640/Simple-chat-application-using-NodeJS-and-Socket-IO