Thứ Tư, 26 tháng 7, 2023

Thiết kế hệ thống hẹn giờ cho trang tin tức

Chủ đề này trong thực tế rất nhiều bạn vướng mắc nhưng không biết cách giải đáp, nên trong bài này tôi sẽ đưa ra một giải pháp và các bạn sẽ cùng tôi thảo luận chủa đề này nhé. Và trước tiên ta sẽ tìm hiểu qua về cơ chế lưu trữ kiểu ngày tháng trong mysql.

Mục lục

  • 1. Cơ chế lưu trữ kiểu ngày tháng trong mysql
  • 2. Ý tưởng thiết kế dữ liệu cho chức năng hẹn giờ
  • 3. Lời kết

1. Cơ chế lưu trữ kiểu ngày tháng trong mysql

Như bạn biết trong mysql chúng ta có thể lưu định dạng ngày tháng là kiểu date, kiểu datetime. Đây là hai kiểu chính và các bạn rất thường hay sử dụng để tìm kiếm. Nhưng có một sự thật mà ít bạn quan tâm đến đó là nếu như bạn truy vấn với kiểu INT và có index thì tốc độ sẽ rất nhanh. Ý của tôi tức là thay vì ta lưu kiểu date hoặc datetime thì ta tạo thêm một field kiểu UNSIGN INT nữa và dùng code PHP để chuyển ngày tháng sang trước khi lưu vào CSDL.

Trong mysql năm bắt đầu ta sẽ tính bắt đầu từ năm 1970 và tới nay là năm 2014, tính ra khoảng 44 năm. Và tổng khoảng thời gian 44 năm này chuyển sang kiểu INT sẽ có tổng cộng 1407612770 giây. Nhưng trong mysql, kiểu UNSIGN INT chỉ lưu trữ tới mức khoảng 4294967295 là hết, như vậy tính ra ta còn có thể lưu thê được ít nhất hơn 60 năm nữa mới max. Tới lúc đó thì công nghệ phát triển rồi nên chắc chắn sẽ ko bị hạn chế như vậy.

2. Ý tưởng thiết kế dữ liệu cho chức năng hẹn giờ

Ý tưởng thứ nhất chính là phần phân tích cơ chế lưu trữ trong mysql trên.

Bài viết này được đăng tại [tranvanbinh.vn]

Ý tưởng thứ 2 dựa vào ý tưởng thứ nhất ta sẽ lưu trữ một field gọi là news_timer (kiểu UNSIGN INT), field này có giá trị chính là thời gian mà người dùng chọn đăng bài. Như vậy khi hiển thị danh sách tin tức thì ta chỉ cần thêm điều kiện lọc ngày hiện tại phải lơn hoặ hoặc bằng ngày hiển thị trong timer.

Như bạn biết, khi làm việc với tin tức ta sẽ có một field gọi là status, giá trị bằng 1 là hiển thị, giá trị bằng 0 là không hiển thị. Vậy gộp lại ta có điều kiện lọc nhu sau:

Select * from news where status = 1 and timer <= $bien_kieu_int_time_hien_tai

Với điều kiện lọc như vậy thì ta thấy cũng tối ưu rồi, vì cả hai điều kiện ta có thể đánh chỉ số index. Nhưng có cách nào tối ưu hơn không? Để trả lời câu hỏi này các bạn chú ý đến phần phân tích thời gian từ 1970 tới nay mà tôi đề cập ở trên, ta sẽ có ý tưởng như sau:

Chọn thời gian max chính là giá trị max của kiểu UNSIGN INT, tức là số 4294967295, tôi chọn 4200000000 cho chẵn.

Như vậy ta sẽ bỏ đi field status, còn mỗi field timer thôi. Nếu người dùng chọn ẩn tin thì ta sẽ thiết lập gái trị cho timer bằng 4200000000, còn không thì ta lưu thời gian bình thường. Như vậy khi hiển thị tin ta chỉ lọc đúng một điều kiện timer duy nhất. Ta đánh chỉ mục index nữa thì tốc độ sẽ nhanh hơn rất nhiều.

3. Lời kết

Ý tưởng này tôi đã thực hiện trong dự án của bản thân nên hôm nay tôi muốn chia sẽ với các bạn với mong muốn giúp một số bạn có cái nhìn ra xa hơn về vấn đề phân tích CSDL. Và tôi cũng mong muốn nhận được nhiều ý kiến đóng góp từ chính các bạn. Thân chào và hẹn gặp lại ơ bài gần nhất.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master