Đồng thời Photome cũng là một mạng xã hội hình ảnh dùng để giải trí hướng đến những người yêu thích chụp ảnh… Hình thức phát triển: App mobile Công nghệ sử dụng: + Frontend: React
Trang 11
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
ĐỒ ÁN 1 MẠNG XÃ HỘI PHOTOME DÀNH CHO THỢ CHỤP ẢNH VÀ NGƯỜI CÓ NHU CẦU CHỤP
ẢNH, MẪU ẢNH
Giảng viên hướng dẫn: TH.S NGUYỄN CÔNG HOAN
Sinh viên thực hiện: HÀ NHẬT LINH – MSV: 18520086
PHẠM VŨ LÊ MINH – MSV: 18520103
Tp Hồ Chí Minh, Tháng 7 năm 2021
Trang 22
Trang 3LỜI NÓI ĐẦU
Tài liệu này được tạo ra bởi yêu cầu của lớp SE121.L21, Trường Đại học Công nghệ Thông tin, Đại học Quốc gia Thành phố Hồ Chí Minh, học kỳ II năm học 2020-
2021
Báo cáo này bao gồm các thông tin từ việc khảo sát và tham khảo các nền tảng mạng xã hội, các tài liệu thiết kế và đặc tả của phần mềm mạng xã hội bao gồm các sơ đồ Use-case, các thực hiện hóa cơ sở dữ liệu, giao diện…
Cách đọc tài liệu: Nội dung tài liệu được đưa vào các mục, và được đánh số thứ tự
từ trên xuống, chi tiết xem thêm tại mục lục
Chúng em cảm ơn thầy Nguyễn Công Hoan đã hỗ trợ và hướng dẫn để nhóm có thể hoàn thành tốt đồ án
Trang 4NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Người nhận xét (Ký tên và ghi rõ họ tên)
Trang 62.4 Các khái niệm cơ bản 20
4.3 Lợi ích sử dụng firebase và lý do sử dụng firebase vào việc lưu trữ ảnh 25
Trang 8I GIỚI THIỆU BÀI TOÁN CẦN GIẢI QUYẾT, MÔ TẢ QUY TRÌNH THỰC
HIỆN CÁC CÔNG VIỆC CHÍNH
Xây dựng một mạng xã hội cho thợ chụp ảnh, mẫu ảnh và người có nhu cầu chụp ảnh
Xác định đối tượng hướng đến:
Người dùng: Thợ chụp ảnh, mẫu ảnh, người sở hữu mẫu ảnh, người có nhu cầu chụp ảnh, người có niềm đam mê với nhiếp ảnh
Mục đích: Tạo ra một môi trường nhiếp ảnh hiện đại Ở đó mọi người có thể tập chung vào nhiếp ảnh Tạo điều kiện thuận lợi nhất để mọi người có thể tìm kiếm cơ hội của mình, liên lạc và cộng tác cùng nhau thông qua mạng xã hội Photome Đồng thời Photome cũng là một mạng xã hội hình ảnh dùng để giải trí hướng đến những người yêu thích chụp ảnh…
Hình thức phát triển: App mobile
Công nghệ sử dụng:
+ Frontend: React Native + Backend: NodeJS, Express, MongoDB, Firebase
Hiện tại các hoạt động chụp ảnh, nhiếp ảnh đều là các hình thức tự phát, không có
sự gắn kết giữa những người yêu thích với nhau lại thành một cộng đồng lớn Hay nếu có gắn kết thông qua một mạng xã hội lớn nào khác, thì các hoạt động nhiếp ảnh sẻ bị pha loãng bởi tính chất mạng xã hội đa phương tiện Những người dùng yêu chụp ảnh và có nhu cầu về chụp ảnh khó có thể sàng lọc các đối tượng trên những trang mạng xã hội lớn đồng thời bị những vấn đề khác gây loãng kết quả
Có một số ứng dụng mạng xã hội cho nhiếp ảnh gia đã được phát triển, nhằm tạo không gian cho những người yêu thích chụp ảnh Tuy nhiên những ứng dụng này chỉ dừng lại ở việc chia sẻ ảnh và tạo sự gắn kết giữa cộng đồng người chụp ảnh, chứ chưa tạo được
sự phân hóa và nhu cầu của những thực thể trong mạng xã hội
Trang 9Nắm bắt được yêu cầu đó Những người dùng cần có những bức ảnh đẹp Chụp ảnh không chỉ là để vui mà nó còn là một nghề nghiệp Tạo thêm nhiều công việc cho những mẫu ảnh bán chuyên và chuyên nghiệp Cũng như tạo được không gian nhiếp ảnh lành mạnh Chúng em đã thống nhất chọn đề tài Photome mạng xã hội cho thợ chụp ảnh, mẫu ảnh và người có nhu cầu chụp ảnh
App được xây dựng bao gồm các nội dung cơ bản:
Tạo tài khoản cá nhân, profile cho cá nhân để giới thiệu bản thân (như CV)
Up các bài đăng của mình(Ảnh và các status trạng thái)
Tương tác (like , comment ) với các bài viết của người khác
Tìm kiếm những người dùng khác nhằm liên lạc hay follow
Xem thông báo những người đã thực hiện tương tác với bài viết của mình
Xem các bài viết, đăng ngẫu nhiên trong trang home và từ đó nhận biết được những bài viết, người dùng cần để ý
Các bước xây dựng App mobile:
Xác định yêu cầu, mô hình hoá
Trang 10II CÔNG NGHỆ
1 React Native
1.1 Khái niệm React Native
Được phát triển bởi Facebook, React Native là một framework hướng đến phát triển ứng dụng di động đa nền tảng
Với sự trợ giúp của React Native, lập trình viên (developer) có thể sử dụng JavaScript
để tạo ra mobile apps (ứng dụng di động) hỗ trợ cho cả nền tảng Android và iOS
Instagram, Facebook, Skype,… là những ứng dụng nổi bật sử dụng React Native
1.2.1 Hiệu suất tuyệt vời
React native có thể không nhanh như các ứng dụng gốc thực sự được xây dựng bằng các ngôn ngữ quen thuộc như Java, Objective-C và C # Tuy nhiên, bạn sẽ có được hiệu suất gần như ngôn ngữ đấy vì nó cung cấp cho bạn các thành phần gốc, Chế độ xem và Văn bản
Ứng dụng dành cho thiết bị di động dựa trên React Native không phải là ứng dụng web HTML5, hybrid hoặc di động Thay vào đó, nó là một ứng dụng di động thực sự
Bạn có thể nâng hiệu suất ứng dụng React Native của mình lên một tầm cao mới bằng cách tối ưu hóa ứng dụng của bạn bằng mã gốc Có, React Native cũng cho phép bạn sử dụng
mã gốc Để có hiệu suất tối đa, bạn có thể xây dựng một số tính năng trong ứng dụng của mình bằng mã gốc và một số tính năng với React Native
1.2.2 Giao diện người dùng phong phú
React Native cho phép bạn tạo các UI độc đáo, bắt mắt thông qua các thành phần khai báo được xây dựng sẵn, chẳng hạn như Picker, Nút, Thanh trượt, Chuyển đổi, v.v Bạn cũng
có thể tạo các thành phần của riêng bạn với TouchableNativeFeedback và TouchableOpacity
Có nhiều thành phần dành riêng cho iOS và Android có sẵn để giúp thiết bị hoạt động hiệu quả trên điện thoại di động Android và iOS
Trang 111.2.3 Phát triển ứng dụng nhanh
React Native cung cấp cho bạn các thành phần cho văn bản, hình ảnh, đầu vào bàn phím, danh sách có thể cuộn, thanh tiến trình, hình động, bảng tạm, liên kết, v.v Các thành phần này tăng tốc đáng kể quá trình phát triển ứng dụng và tính năng Tải lại nóng cũng giúp bạn tiết kiệm rất nhiều thời gian vì nó cho phép bạn tải lại ứng dụng của mình mà không cần biên dịch lại toàn bộ mã
Phản ứng thư viện bản địa như Redux (để xử lý trạng thái ứng dụng của bạn) và Phản ứng tuyệt vời bản địa (danh sách các thành phần và bản trình diễn) cũng sẽ giúp bạn hoàn thành công việc phát triển ứng dụng di động của mình nhanh hơn
Công cụ phát triển như Hạt nhân để viết mã, Yoga để xây dựng bố trí, Lính gác để theo dõi lỗi và sự cố, và Công cụ phát triển React để gỡ lỗi làm cho quá trình phát triển React Native dễ dàng hơn và nhanh hơn rất nhiều Các công cụ React Native tuyệt vời khác bao gồm
Mã VS, Đốt cháy, Hội chợ triển lãm, và Bugsnag
1.2.4 Phát triển đa nền tảng
Mã một lần, sử dụng nó ở khắp mọi nơi Tiết kiệm thời gian và tiền bạc bằng cách xây
Trang 12dựng các ứng dụng đa nền tảng Nhưng hãy nhớ rằng bạn vẫn cần thực hiện một số điều chỉnh dành riêng cho nền tảng
1.2.5 Hỗ trợ cộng đồng mạnh mẽ
Hơn 2.000 người đóng góp với hơn 85.000 ngôi sao trên GitHub
Các công ty như Callstack, Biệt thự phần mềm, Microsoft, và Màu đỏ vô hạn đã đóng góp cho khuôn khổ này Bạn sẽ tìm thấy rất nhiều thành phần và thư viện React Native được tạo bởi cộng đồng các nhà phát triển trên các trang web như Mã thông báo và Thư mục gốc
Nhận trợ giúp về StackOverflow, Reddit hoặc là Bộ giải mã Bạn luôn luôn tìm người giúp bạn Bạn cũng có thể nhận được sự giúp đỡ từ Cộng đồng bất hòa Reactiflux, các Phản ứng nhóm Facebook gốc, và Phản ứng cộng đồng Spectrum bản địa
1.2.6 Dễ học
Các tài liệu chính thức thân thiện với người mới bắt đầu và có ví dụ mã Bên cạnh các
Trang 13tài liệu chính thức, bạn cũng có thể thử các cách sau để có được thực hành
1.3.1 Kiến trúc cũ
Thực chất, React Native là một giải pháp platform-agnostic (không phụ thuộc nền tảng) Trong phạm vi này, mục tiêu chính của framework là cho phép các developer viết code bằng Javascript với ReactJS trong khi ở bên dưới React Native sử dụng các cơ chế riêng của
nó để biên dịch các React Element để phía hệ điều hành có thể hiểu được Điều này có nghĩa là:
- Hiển thị chính xác giao diện người dùng
- Khả năng truy cập đến các thành phần native của hệ điều hành
Thông thường, đối với hệ điều hành Android/iOS, cơ chế hoạt động sẽ như sau:
Có 3 luồng chạy song song và riêng biệt trong mỗi ứng dụng React Native:
● JS thread: là nơi tất cả code Javascript được đọc và biên dịch, nơi xử lý hầu hết các logic nghiệp vụ của ứng dụng Metro sẽ đóng gói tất cả code Javascript thành một file duy nhất Phần code này sẽ được chuyển tới công cụ JavascriptCore (JSC) để có thể chạy được
Trang 14● Native thread: là nơi xử lý code native Nó giao tiếp với JS Thread bất cứ khi nào có nhu cầu cần thay đổi UI hoặc truy cập các hàm native Chúng ta có thể chia Native Thread thành Native UI và Native Modules Tất cả các Native Modules đều được khởi động khi chúng ta sử dụng ứng dụng Điều đó có nghĩa là module Bluetooth sẽ luôn luôn ở trạng thái kích hoạt bởi React Native kể cả khi không có nhu cầu sử dụng
● Shadow Thread: là nơi các layout sẽ được tính toán Nó sử dụng Layout Engine riêng của Facebook được gọi là Yoga nhằm tính toán flexbox layout, sau đó gửi kết quả về phía Native UI
Để giao tiếp giữa JS thread và Native thread chúng ta sẽ sử dụng một Bridge Phía bên dưới, Module C++ này hầu hết được xây dựng xung quanh bằng một hàng đợi bất đồng bộ (asynchronous queue) Bất cứ khi nào nó nhận được dữ liệu từ một trong hai phía (JS thread hoặc Native thread), nó sẽ tuần tự hóa dữ liệu dưới dạng JSON và chuyển nó qua hàng đợi, cuối cùng được giải mã khi nó tới nơi
Điều này có nghĩa là tất cả các thread đều dựa trên chuỗi tín hiệu JSON được truyền bất đồng bộ qua Bridge, và chúng sẽ được gửi tới một trong hai phía với mong muốn (nhưng không chắc là đảm bảo) sẽ nhận được phản hồi trong tương lai Bạn cũng có thể sẽ gặp phải vấn đề tắc nghẽn thông tin và không nhận được phản hồi
Một ví dụ phổ biến cho biết lý do tại sao điều này lại tạo ra các vấn đề về hiệu suất khi được nhìn thấy khi cuộn một danh sách dữ liệu lớn: Bất cứ khi nào sự kiện onScroll xảy ra trên Native thread, thông tin sẽ được gửi không đồng bộ đến JS thread, nhưng Native thread không chờ JS thread thực hiện xong mà nó lại gửi trở lại theo cách khác Điều này tạo ra một
sự delay, sẽ có một khoảng trống trước khi thông tin xuất hiện trên màn hình
Tương tự như vậy, việc tính toán hiển thị layout cần phải trải qua nhiều vòng trước khi nó
có thể được hiển thị trên màn hình, vì nó cần phải đi qua Yoga engine trước khi có thể được tính bởi Native thread và tất nhiên chúng cũng sẽ phải đi qua Bridge để tới JS Thread
Trang 15Chúng ta có thể nhận thấy cách gửi dữ liệu JSON một cách bất đồng bộ sẽ tạo ra vấn đề
về hiệu suất Nhưng còn cách nào khác để Javascript của chúng ta giao tiếp với Native code? Đây là nơi JSI phát huy tác dụng
1.3.2 Kiến trúc mới
Việc tái kiến trúc của React Native sẽ dần loại bỏ Bridge và thay thế nó bằng một thành phần mới có tên là Javascript Interface (JSI)
JSI có một vài cải tiến mới rất thú vị, đầu tiên là JS bundle không còn phụ thuộc vào
JS core nữa Nói cách khác, JSC engine giờ đây có thể dễ dàng hoán đổi với các JavaScript engine khác - có khả năng hoạt động tốt hơn - như Chrome Engine V8 chẳng hạn
Cải tiến thứ hai của kiến trúc mới này là Bằng cách sử dụng JSI, JavaScript có thể giữ tham chiếu đến C++ Host Object và truy cập phương thức trên chúng Từ đó JavaScript và các thành phần Native sẽ nhận thức và giao tiếp được lẫn nhau
Nói cách khác, JSI sẽ cho phép khả năng tương tác hoàn toàn giữa tất cả các thread Với khái niệm chia sẻ quyền sở hữu (shared ownership), code JavaScript có thể giao tiếp với các thành phần Native trực tiếp từ JS thread và bỏ qua việc tuần tự hóa thông điệp dạng JSON giữa các thành phần, loại bỏ tất cả các vấn đề tắc nghẽn và bất đồng bộ trên Bridge
Trang 16Ngoài việc cải thiện đáng kể hiệu suất giao tiếp giữa các thread với nhau, kiến trúc mới này cũng cho phép kiểm soát trực tiếp các Native modules Có nghĩa là chúng ta hoàn toàn có thể sử dụng các Native modules khi chúng ta cần chúng, không cần kích hoạt tất cả khi khởi chạy ứng dụng Điều này mang lại sự cải thiện hiệu suất hết sức rõ rệt
Cơ chế mới này có khả năng linh hoạt, cũng có thể có lợi cho nhiều trường hợp sử dụng khác nhau Chẳng hạn như bây giờ chúng ta có sức mạnh của C++ trong tay, thật dễ dàng để thấy React Native có thể được sử dụng trong một hệ thống rất lớn
Trang 171.4 Mô tả tổng quát codebase
1.4.1 Firebase
Thư mục này chứa firebase config và các hàm để liên kết với filebase và hỗ trợ đăng ảnh lên firebase
Trang 181.4.2 Server
Thư mục này chứa tất cả các API , Schema và các file config kết nối cơ sở dữ liệu Mongodb
● Các API để thực hiện truy xuất và các thao tác cần thiết với database
● Schema để quy định và cấu trúc định dạng database cần lưu
● Các file config để hỗ trợ việc kết nối với mongodb
1.4.3 SRC
Thư mục này bao gồm:
● Asset chứa tất cả image và font cần thiết cho ứng dụng
● Các components, screen, để tạo frontend hình dạng chính của các màn hình và các hàm
xử lý dữ liệu ở trong
● Navigations dùng để điều hướng các màn hình
● Styles để quy định format của một đối tượng cụ thể
2 Mongodb
MongoDB (bắt nguồn từ “humongous”) là một hệ cơ sở dữ liệu NoSQL mã nguồn mở
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ư:
Craigslist : 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à
Trang 19ghi 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, …
2.2 Khái niệm Mongodb:
2.2.1 Mongodb là gì:
MongoDB là một chương trình cơ sở dữ liệu mã nguồn mở được thiết kế theo kiểu hướng đối tượng trong đó các bảng được cấu trúc một cách linh hoạt cho phép các dữ liệu lưu trên bảng không cần phải tuân theo một dạng cấu trúc nhất định nào Chinh do cấu trúc linh hoạt này nên MongoDB có thể được dùng để lưu trữ các dữ liệu có cấu trúc phức tạp và đa dạng và không cố định (hay còn gọi là Big Data)
Tuy nhiên khi đưa ra định nghĩa như ở trên tôi đã sử dụng khái niệm bảng trong các cơ
sở dữ liệu có quan hệ để bạn có thể dễ hiểu Trên thực tế thì MongoDB sử dụng thuật ngữ khác là collection hay bộ sưu tập thay vì bảng Các cơ sở dữ liệu quan hệ (như MySQL hay SQL Server ) sử dụng các bảng để lưu dữ liệu Các bảng này được cấu trúc với một số lượng cột (column) nhất định và các cột này cũng được định nghĩa với kiểu dữ liệu nhất định Ngược lại MongoDB lưu document (hay tài liệu tương tự như các record trong MySQL hay SQL Server) vào các collection với định dạng JSON hay Javascript Object Notation Do đó khi truy vấn dữ liệu hay cập nhật dữ liệu của document trong MongoDB chúng ta sử dụng cú pháp theo kiểu hướng đối tượng
2.2.2 Kiến trúc tổng quát
Một MongoDB Server sẽ chứa nhiều database Mỗi database lại chứa một hoặc nhiều collection Đây là một tập các documents, 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
Trang 20trú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, …
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
Trang 212.3 Chức năng, vai trò của Mongodb
2.3.1 Chức năng:
● Truy vấn: Đây được xem là tính năng tốt nhất của MongoDB Nó có tác dụng giúp các trường truy vấn phạm vi, kết hợp cùng việc tìm kiếm biểu thức nhằm trả về kết quả tài liệu cụ thể với kích thước nhất định Ngoài ra, các trường dùng trong MongoDB còn được dùng để lập chỉ mục chính, phụ
● Lưu trữ tệp: Khi tìm hiểu hệ cơ sở dữ liệu MongoDB thì bạn sẽ thấy, tính năng lưu trữ tệp được dùng như một hệ thống tệp (gọi là GridFS) đóng vai trò cân bằng tải, đồng thời, sao chép dữ liệu trên nhiều máy tính Cụ thể, GridFS chia một tệp ra làm nhiều phần và lưu trữ thành các tài liệu riêng biệt Sau đó, người dùng dễ dàng truy cập GridFS thông qua Mongofiles hay các plugin sử dụng cho Nginx và Lighttpd
● Tập hợp: Tính năng này chính là chương trình mang đến ba giải pháp để thực hiện tập hợp gồm Aggregation Pipeline, Mapreduce và Single-purpose Aggregation Trong đó, Aggregation Pipeline được đánh giá là có hiệu suất tốt nhất
● Nhân rộng: MongoDB cung cấp Replica Set cho phép nhân 2 hoặc nhiều bản sao của dữ liệu Đồng thời, mỗi bản sao lại đóng vai trò chính và phụ
- Khi nhân rộng, toàn bộ dữ liệu khi ghi và đọc được thực hiện trên bản sao chính
- Bản sao thứ cấp sẽ dùng bản sao tích hợp để có thể duy trì các bản sao dữ liệu
Trang 22Trong trường hợp có bất kỳ bản sao chính nào bị thất bại thì Replica set sẽ chọn một bản
sao thứ cấp để thay thế làm bản sao chính tiếp theo Trong quá trình nhân rộng, Replica thứ cấp được tùy ý chọn các hoạt động nhưng dữ liệu cuối cùng vẫn phải tuân theo mặc định
● Cân bằng tải: MongoDB sử dụng Sharding nhằm chia tỷ lệ theo chiều ngang và xác định dữ liệu phân phối trong collection Điều này giúp người dùng có thể chọn một Shard key
Nói tóm lại, MongoDB cân bằng tải bằng cách dựa vào các Shard key để chia dữ liệu
thành các phạm vi và phân phối đồng đều Chúng có thể chạy trên nhiều máy chủ khác nhau và thực hiện chức năng sao chép dữ liệu hay cân bằng tải nhằm giữ hệ thống hoạt động liên tục trong trường hợp phát sinh lỗi về phần cứng
2.3.2 Vai trò:
● Là Nosql dễ dàng tiếp cận và sử dụng cho các ứng dụng
● Các thao tác thêm sửa xóa đơn giản với mông
● Được mọi người ưa chuộng rộng rãi
● Phát triển tốt và có những chức năng nổi bật
2.4.1 Database
Database là một container vật lý cho các collection Mỗi DB được thiết lập cho riêng
nó một danh sách các files hệ thống files Một máy chủ MongoDB đơn thường có nhiều DB
2.4.2 Collection
Collection là một nhóm các documents của MongoDB Nó tương đương với một table trong RDBMS Một Collection tồn tại trong một cơ sở dữ liệu duy nhất Các collection ko tạo nên một schema Documents trong collection có thể có các fields khác nhau Thông thường, tất cả các documents trong collections có mục đích khá giống nhau hoặc liên quan tới nhau
2.4.3 Document
Một document là một tập hợp các cặp key-value Documents có schema động Schema động có nghĩa là documents trong cùng một collection không cần phải có cùng một nhóm các fields hay cấu trúc giống nhau, và các fields phổ biến trong các documents của collection có
Trang 23thể chứa các loại dữ liệu khác nhau
MongoDB cung cấp 2 phương thức để chèn document vào một collection
● db.collection.insertOne(): chèn một tài liệu mới vào một collection Nếu document không có trường _id , MongoDB sẽ tự động thêm trường _id với value kiểu ObjectId
● db.collection.insertMany(): insert nhiều document vào một collection, truyền vào phương thức là mảng các document
Read operation truy xuất documents từ một collection
Để lấy ra tất cả các document trong collection, truyền vào một document trống vào phương thức find
Ngoài ra còn các điều kiện cụ thể hơn để truy xuất cụ thể hơn
Trang 24Delete operation xóa bỏ document từ một collection
Để xóa tất cả các tài liệu từ một collection, truyền một document filter {} tới phương thức db.collection.deleteMany()
Ví dụ sau xóa tất cả các document của collection inventory
Xóa tất cả các document thỏa mãn điều kiện
Trang 25Bạn có thể chỉ định các tiêu chí hoặc bộ lọc xác định các tài liệu cần xóa
Để chỉ định điều kiện bằng, sử dụng biểu thức <field>:<value>
Có thể sử dụng query operators để chỉ định các điều kiện:
Xóa chỉ một document thỏa mãn điều kiện
Để xóa chỉ một document phù hợp với điều kiện( trường hợp có nhiều document thỏa mãn thì sẽ xóa document đầu tiên), sử dụng db.collection.deleteOne()
Ví dụ sau xóa document đầu tiên mà có status bằng "D"
3 NodeJs
NodeJS được phát triển từ Javascript vào năm 2009 bởi Ryan Dahl NodeJS có cách thức hoạt động chủ yếu trên Server sử dụng để xây dựng cho các ứng dụng realtime NodeJS dùng mô hình I/O lập trình dựa theo sự kiện non-blocking
Chính vì vậy, NodeJS tương đối gọn nhẹ, hiệu quả và là một công cụ hoàn hảo dành cho mọi ứng dụng chuyên sâu về dữ liệu dựa theo khoảng thời gian thực khi chạy trên những thiết bị phân tán NodeJs thường xuyên được dùng cho mục đích xây dựng một số ứng dụng như: Ad Server, Websocket server, Fast File Upload Client, RESTful API, Cloud Services, Any Real-time Data Application
● NodeJS là một Platform mà không phải là một Framework mà Chính vì vậy, nó cho phép chúng ta có thể xây dựng cho các website một cách độc lập và nhanh chóng hơn
● NodeJS thường sẽ chạy trên đa nền tảng phía Server nên nó có thể thực hiện chạy ở bất
kỳ các máy như: Mac – Window – Linux
● NodeJS không được xem là một ngôn ngữ lập trình, nên những người mới bắt đầu làm quen với NodeJS thì không thể học ngay được nếu như không nắm chắc kiến thức lập trình căn bản như: các giao thức, Javascript,… Tuy nhiên, cộng đồng NodeJS thường rất lớn và nó sẵn sàng support cho bạn mọi lúc mọi nơi
Trang 26● NodeJS được xem là một máy chủ đơn luồng và không có khả năng hỗ trợ đa luồng
● Phần core của NodeJS thường được biết bằng ngôn ngữ C++ nên nó hiệu năng cung như tốc độ xử lý tương đối cao Nhờ vậy, hầu hết các ứng dụng NodeJS đều có khả năng đáp ứng được thời gian thực chạy trên đa nền tảng, đa thiết bị,…
Các thành phần của NodeJs
NodeJS là một trong những thành phần quan trọng để xây dựng các ứng dụng realtime Chính vì vậy, lập trình viên cần phải biết được các ứng dụng của NodeJS để việc áp dụng sẽ được đơn giản hóa
● NodeJS có thể tạo, mở, đọc, ghi, xóa và đóng các tập tin ngay khi đang truy cập trên máy chủ
● Tạo ra nội dung cho các trang web động
● NodeJS thực hiện thu thập các dữ liệu theo yêu cầu