Tin học 88 - chia sẻ kiến thức
ADS

UUID là gì? Sử dụng javascript tạo UUID

UUID là gì? UUID là viết tắt của Universally Unique IDentifier, có thể hiểu đó là một định danh duy nhất và không có cái thứ hai. Hay nói cách khác đó là một id duy nhất trong global (khóa chính, giống CMND/Thẻ CCCD vậy).

Mục lục

    UUID là gì?

    UUID là viết tắt của Universally Unique IDentifier, hiểu nôm na là một định danh duy nhất trong toàn thể giới. Mục đích của UUID sinh ra là bởi vì:

    • Dữ liệu lớn, kiểu khóa chính auto increment cần nhiều byte để lưu hơn. Và khóa chính kiểu này không phù hợp khi mà hệ thống có nhiều server, nhiều client cùng lúc truy cập trên toàn thế giới.
    • Nếu dùng khóa chính kiểu auto increment, có thể dễ dàng truy ra được trong database có bao nhiêu record. Thường thấy ở đường dẫn kiểu "domain.com/user/123456".

    Bởi vậy UUID ra đời nhằm khắc phục những yếu điểm trên. Vậy nếu bạn đủ sức xây dựng một hệ thống với nhiều server, phục vụ hàng tỉ user hoặc chỉ đơn giản là không muốn để lộ id ra ngoài, hãy nghĩ tới UUID. Với mục đích của bài đăng này sẽ sử dụng javascript để tạo một UUID. Chứ không phải dành thời gian để phân tích về UUID.

    Cấu trúc chuỗi UUID

    Số nhận dạng duy nhất phổ biến (UUID) là một số 128 bit xác định thông tin trong hệ thống máy tính. Nó còn được gọi là Mã nhận dạng duy nhất trên toàn cầu (GUID). Biểu diễn tiêu chuẩn của một UUID thường được tạo bằng các chữ số thập lục phân:

    e5d520d8-d06e-4bc2-9bb9-a28e47014884

    Có nhiều cách khác nhau để tính UUID. Sự khác biệt là gì và cung cấp một số thông tin chi tiết về cách triển khai.

    Phiên bản Một

    Phiên bản một UUID là số nhận dạng duy nhất trên toàn cầu được tạo bằng địa chỉ MAC của máy tính và thời điểm tạo.

    Điều này có nghĩa là một UUID phiên bản một là duy nhất? Chà, chúng khá nhiều. Có giới hạn 163 tỷ mỗi giây trên một máy tính (hoặc nút) để đảm bảo tính duy nhất, nhưng đó không phải là điều bạn thường gặp khi là một nhà phát triển.
    Có những vấn đề khác cần lo lắng với phiên bản này. Tính duy nhất gần như được đảm bảo đi kèm với cái giá phải trả là ẩn danh. Vì phiên bản này cần thời gian và địa chỉ MAC duy nhất để xem xét, nên có thể xác định địa chỉ và thời gian của máy tính.

    Phiên bản hai

    Các UUID của phiên bản hai tương tự như phiên bản một và không thường được triển khai vì RFC 4122 không cung cấp nhiều chi tiết. Trong thực tế, bạn sẽ không sử dụng chúng. Chúng còn được gọi là UUID bảo mật DCE.

    Phiên bản ba

    Trong phiên bản ba, băm mật mã và chuỗi văn bản do ứng dụng cung cấp được sử dụng để tạo UUID. Trong phiên bản này, băm MD5 được sử dụng. UUID được tạo từ tên. Bây giờ chúng ta có thể sử dụng tên và không gian tên để tạo một loạt các UUID. Thuật toán băm MD5 là một hàm băm được sử dụng rộng rãi tạo ra giá trị băm 128 bit.

    Ban đầu MD5 được thiết kế để sử dụng như một hàm băm mật mã, nhưng bây giờ nó xuất hiện các vấn đề về lỗ hổng bảo mật. Quá dễ dàng để tìm thấy hai thông báo khác nhau băm thành cùng một giá trị. Do đó, đây không phải là phiên bản bạn muốn sử dụng trong ứng dụng của mình.

    Phiên bản bốn

    Bộ tạo số giả ngẫu nhiên, còn được gọi là bộ tạo bit ngẫu nhiên xác định, là một thuật toán để tạo ra một dãy số có các thuộc tính gần đúng với các đặc tính của dãy số ngẫu nhiên. - Wikipedia

    Phiên bản này sử dụng trình tạo số giả ngẫu nhiên để tạo UUID. Nó rất đơn giản để sử dụng. Mỗi bit của chuỗi được tạo hoàn toàn "ngẫu nhiên". Vẫn có khả năng một UUID có thể bị trùng lặp nhưng nó rất nhỏ vì số lượng kết hợp có thể có cao. Số khả năng chính xác là khoảng 2128.

    Phiên bản bốn có triển khai trong hầu hết các ngôn ngữ lập trình, kể từ ngày nay. Nó rất dễ sử dụng. Tôi sẽ đưa ra một ví dụ trong Java:

    UUID uuid = UUID.randomUUID();

    Sự khác biệt duy nhất giữa phiên bản ba và phiên bản năm là một thuật toán băm khác được sử dụng. Phiên bản năm sử dụng SHA-1 thay vì MD5. Mặc dù về mặt kỹ thuật, nó là một thuật toán băm vượt trội, nhưng nó cũng có thể gặp phải những vấn đề tương tự như phiên bản ba đã gặp phải. Tôi không khuyên bạn nên sử dụng nó.

    Tạo UUID trong javascript

    Đối với nhiều nhà phát triển, UUID dường như là một cách tuyệt vời để thiết lập danh tính của một bản ghi trong một hệ thống, thật tuyệt vời khi bạn có thể tạo một ID duy nhất cho mọi hệ thống trên thế giới?

    // Author: Abhishek Dutta, 12 June 2020
    // License: CC0 (https://creativecommons.org/choose/zero/)
    function uuid() {
    	var temp_url = URL.createObjectURL(new Blob());
    	var uuid = temp_url.toString();
    	URL.revokeObjectURL(temp_url);
    	return uuid.substr(uuid.lastIndexOf('/') + 1); // remove prefix (e.g. blob:null/, blob:www.test.com/, ...)
    }
    // Cách sử dụng tạo uuid
    for(var i=0; i<10; ++i) { console.log(uuid()); }
    
    /*
    f6ca05c0-fad5-46fc-a237-a8e930e7cb49
    6a88664e-51e1-48c3-a85e-7bf00467e9e6
    e6050f4c-e86d-4081-9376-099bfbef2c30
    bde3da3c-b318-4498-8a03-9a773afa84bd
    ba0fda03-f806-4c2f-b6f5-1e74a299e603
    62b2edc3-b09f-4bf9-8dbf-c4d599479a29
    e70c0609-22ad-4493-abcc-0e3445291397
    920255b2-1838-497d-bc33-56550842b378
    45559c64-971c-4236-9cfc-706048b60e70
    4bc4bbb9-1e90-432b-99e8-277b40af92cd
    */

    Kết luận

    Lợi ích tuyệt vời của UUID là nó thực tế là duy nhất (trái ngược với duy nhất được đảm bảo), vẫn hoàn toàn có thể chấp nhận được để sử dụng hàng ngày.

    Dưới đây là những nhược điểm chính của UUID:

    Ví dụ: thay vì sử dụng một chỉ mục tăng lên mỗi khi bản ghi được chèn vào cơ sở dữ liệu, UUID cần được tạo. Điều này có thể mất nhiều thời gian hơn. Nó không nói gì về thứ tự của sự sáng tạo. Nếu bạn cần đặt hàng, hãy cân nhắc không sử dụng UUID để sắp xếp thứ gì đó không phải là số nhận dạng.
    Họ có thể hơi lạ khi làm việc cùng. UUID cũng không nói gì về thực thể mà nó thuộc về. Điều này có thể khiến việc gỡ lỗi trở nên khó khăn hơn, đặc biệt là trong các thử nghiệm.
    Đó là một giá trị khá dài, có thể ảnh hưởng đến hiệu suất. Tuy nhiên, không gian rẻ hơn những ngày này.
    Lợi ích chính của UUID là nó duy nhất. Người dùng gần như không thể đoán nó là một tham số URL (mở để thảo luận vì đây có thể là vấn đề bảo mật). Và chúng là duy nhất trên các ứng dụng.
    Nó độc lập với môi trường. Bạn có thể tạo nó ở bất cứ đâu (thậm chí ngoại tuyến) và bạn không dựa vào cơ sở dữ liệu để tạo số nhận dạng. Khi bạn có nhiều cơ sở dữ liệu chứa một phân đoạn (phân đoạn) dữ liệu của mình, một UUID là duy nhất trên tất cả các cơ sở dữ liệu, không chỉ cơ sở dữ liệu bạn đang sử dụng. Điều này làm cho việc di chuyển dữ liệu giữa các cơ sở dữ liệu an toàn hơn nhiều.

    Phiên bản bốn là hoàn toàn ngẫu nhiên và không thể đoán trước và đây là phiên bản tôi muốn khuyên bạn nên sử dụng ngay bây giờ.

    Nếu bạn không muốn xảy ra xung đột trên nhiều trường hợp cơ sở dữ liệu, bạn không muốn ID có thể dự đoán được hoặc cung cấp thông tin về hệ thống, hãy xem xét sử dụng UUID.

    Nguồn Internet





    Học lập trình PHP

    Bài 7: Hàm trong PHP
    Bài 7: Hàm trong PHP
    Hàm do người sử dụng định nghĩa cho phép bạn xử lý những tác vụ thường lặp đi lặp lại trong ứng dụng. cách khai báo,
    Bài 6: Session và Cookies trong PHP
    Bài 6: Session và Cookies trong PHP
    Để chuyền biến từ trang web này sang trang web khác như bài trước ta có thể dung biến form, nhưng như vây hơi phức tạp để
    Bài 5: Làm việc với biến form trong PHP
    Bài 5: Làm việc với biến form trong PHP
    Biến form trong PHP được biết đến như một loại biến, thay vì khai báo thì biến đó chính là tên của thẻ nhập liệu trong
    Bài 4: Phép toán và biểu thức có điều kiện trong PHP
    Bài 4: Phép toán và biểu thức có điều kiện trong PHP
    Trong bài học này các bạn sẽ tìm hiểu các phép gán, các toán tử, đồng thời giúp cho các bạn hiểu thêm vào các phát biểu
    Bài 3: Hằng trong PHP
    Bài 3: Hằng trong PHP
    Trong bài này, chúng ta tìm hiểu cách khai báo hằng, biến và sử dụng hằng biến. Ngoài ra, bạn cũng tìm hiểu cách chuyển
    Bài 2: Kiểu dữ liệu trong PHP
    Bài 2: Kiểu dữ liệu trong PHP
    Tìm hiểu cơ bản về các kiểu dữ liệu trong ngôn ngữ lập trình PHP, các kiểu dữ liệu thông thường và được sử dụng
    Bài 1: Cú pháp cơ bản trong ngôn ngữ PHP
    Bài 1: Cú pháp cơ bản trong ngôn ngữ PHP
    Về cơ bản ngôn ngữ lập trình PHP là ngôn ngữ dễ sử dụng, thông dụng hiện này, mạnh mẽ, vì là mã nguồn mở được

    Đề thi tham khảo