Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Mười lý do hàng đầu để chuyển từ Oracle sang PostgreSQL

Oracle Relational Database Management System (RDBMS) đã được các tổ chức lớn sử dụng rộng rãi và cho đến nay được coi là công nghệ cơ sở dữ liệu tiên tiến nhất hiện có trên thị trường. Nó thường được so sánh thường xuyên nhất với RDBMS với các sản phẩm cơ sở dữ liệu khác, đóng vai trò là “thực tế” tiêu chuẩn về những gì một sản phẩm nên cung cấp. Nó được db-engines.com xếp hạng là RDBMS số 1 hiện có trên thị trường.

PostgreSQL được xếp hạng là RDBMS số 4, nhưng điều đó không có nghĩa là không có bất kỳ lợi thế nào khi chuyển sang PostgreSQL. PostgreSQL xuất hiện từ năm 1989, mã nguồn mở vào năm 1996. PostgreSQL đã giành được giải DBMS của năm trong hai năm liên tiếp 2017 và 2018. Điều đó cho thấy không có dấu hiệu ngừng thu hút số lượng lớn người dùng và các tổ chức lớn.

Một trong những lý do khiến PostgreSQL thu hút được nhiều sự chú ý là vì mọi người đang tìm kiếm một giải pháp thay thế cho Oracle để họ có thể cắt giảm chi phí cao cho các tổ chức và thoát khỏi sự khóa chặt của nhà cung cấp.

Di chuyển từ Cơ sở dữ liệu Oracle đang hoạt động hiệu quả có thể là một nhiệm vụ khó khăn. Những mối quan tâm như TCO (Tổng chi phí sở hữu) của công ty là một trong những lý do khiến các công ty đưa ra quyết định từ bỏ Oracle hay không.

Trong blog này, chúng ta sẽ xem xét một số lý do chính khiến các công ty chọn rời bỏ Oracle và chuyển sang PostgreSQL.

Lý do thứ nhất:Đó là một dự án nguồn mở đích thực

PostgreSQL là mã nguồn mở và được phát hành theo Giấy phép PostgreSQL, một giấy phép Nguồn mở tự do, tương tự như giấy phép BSD hoặc MIT. Mua sản phẩm và hỗ trợ không cần phí.

Nếu bạn muốn tận dụng phần mềm cơ sở dữ liệu, điều đó có nghĩa là bạn có thể nhận miễn phí tất cả các tính năng có sẵn của cơ sở dữ liệu PostgreSQL. PostgreSQL đã có hơn 30 năm trưởng thành trong thế giới cơ sở dữ liệu và đã được cảm ứng dựa trên nguồn mở từ năm 1996. Nó đã được các nhà phát triển làm việc trong nhiều thập kỷ để tạo ra các phần mở rộng. Điều đó tự nó làm cho các nhà phát triển, các tổ chức và các tổ chức chọn PostgreSQL cho các ứng dụng doanh nghiệp; cung cấp năng lượng cho các ứng dụng di động và kinh doanh hàng đầu.

Một lần nữa, các tổ chức lại nhận ra rằng các giải pháp cơ sở dữ liệu nguồn mở như Postgres cung cấp năng lực, tính linh hoạt và hỗ trợ cao hơn mà không hoàn toàn phụ thuộc vào bất kỳ công ty hoặc nhà phát triển nào. Postgres, giống như Linux trước đây, đã (và tiếp tục) được thiết kế bởi những người dùng chuyên dụng giải quyết các vấn đề kinh doanh hàng ngày, những người chọn trả lại giải pháp của họ cho cộng đồng. Không giống như một nhà phát triển lớn như Oracle, có thể có các động cơ khác nhau trong việc phát triển các sản phẩm mang lại lợi nhuận hoặc hỗ trợ một thị trường hẹp nhưng sinh lợi, cộng đồng Postgres cam kết phát triển các công cụ tốt nhất có thể cho người dùng cơ sở dữ liệu quan hệ hàng ngày.

PostgreSQL thường thực hiện các tác vụ đó mà không làm tăng thêm quá nhiều phức tạp. Thiết kế của nó tập trung nghiêm ngặt vào việc xử lý cơ sở dữ liệu mà không cần phải lãng phí tài nguyên như quản lý môi trường CNTT bổ sung thông qua các tính năng được bổ sung. Đó là một trong những điều mà người tiêu dùng phần mềm mã nguồn mở này thích khi chuyển từ Oracle sang PostgreSQL. Dành hàng giờ để nghiên cứu công nghệ phức tạp về cách hoạt động của cơ sở dữ liệu Oracle hoặc cách tối ưu hóa và điều chỉnh có thể kết thúc với sự hỗ trợ đắt tiền của nó. Điều này thu hút các cơ quan hoặc tổ chức tìm một giải pháp thay thế có thể ít đau đầu hơn về chi phí và mang lại lợi nhuận và năng suất. Vui lòng xem blog trước của chúng tôi về khả năng PostgreSQL có thể khớp sự hiện diện cú pháp SQL với cú pháp của Oracle như thế nào.

Lý do thứ hai:Không có giấy phép và một cộng đồng lớn

Đối với người dùng nền tảng Oracle RDBMS, rất khó để tìm thấy bất kỳ hình thức hỗ trợ cộng đồng nào miễn phí hoặc không có phí quá đắt. Các tổ chức, tổ chức và nhà phát triển thường kết thúc bằng việc tìm kiếm một thông tin thay thế trực tuyến có thể đưa ra câu trả lời hoặc giải pháp cho các vấn đề của họ miễn phí.

Khi sử dụng Oracle, rất khó để quyết định chọn một sản phẩm cụ thể hoặc có sử dụng Hỗ trợ Sản phẩm hay không vì (thường) liên quan đến rất nhiều tiền. Bạn có thể thử một sản phẩm cụ thể để kiểm tra nó, cuối cùng mua nó, chỉ để nhận ra rằng nó không thể giúp bạn. Với PostgreSQL, cộng đồng này hoàn toàn miễn phí và có đầy đủ các chuyên gia có nhiều kinh nghiệm sẵn lòng giúp bạn giải quyết các vấn đề hiện tại của bạn.

Bạn có thể đăng ký danh sách gửi thư ngay tại đây tại https://lists.postgresql.org/ để bắt đầu tiếp cận với cộng đồng. Người mới hoặc thần đồng của PostgreSQL chạm vào dựa vào đây để giao tiếp, giới thiệu và chia sẻ các giải pháp, công nghệ, lỗi, phát hiện mới của họ hoặc thậm chí chia sẻ phần mềm mới nổi của họ. Bạn thậm chí có thể yêu cầu trợ giúp từ trò chuyện IRC bằng cách sử dụng irc.freenode.net và tham gia kênh #postgresql. Bạn cũng có thể tiếp cận với cộng đồng thông qua Slack bằng cách tham gia với https://postgres-slack.herokuapp.com/ hoặc https://postgresteam.slack.com/. Có rất nhiều lựa chọn để thực hiện và rất nhiều tổ chức Nguồn mở có thể đưa ra câu hỏi cho bạn

Để biết thêm chi tiết và thông tin về nơi bắt đầu, hãy xem tại đây https://www.postgresql.org/community/.

Nếu bạn muốn truy cập và thanh toán Dịch vụ Chuyên nghiệp trong PostgreSQL, có rất nhiều tùy chọn để bạn lựa chọn. Ngay cả khi kiểm tra trang web của họ tại https://www.postgresql.org/support/professional_support/northamerica/, bạn cũng có thể tìm thấy một danh sách lớn các công ty ở đó và một số trong số này có giá rẻ. Ngay cả ở đây tại Somenines, chúng tôi cũng cung cấp Hỗ trợ cho Postgres, là một phần của giấy phép ClusterControl hoặc Tư vấn DBA.

Lý do thứ ba:Hỗ trợ rộng rãi cho sự tuân thủ SQL

PostgreSQL luôn quan tâm đến việc thích nghi và tuân theo SQL như một tiêu chuẩn thực tế cho ngôn ngữ của nó. Tên chính thức của tiêu chuẩn SQL là ISO / IEC 9075 “Database Language SQL”. Bất kỳ phiên bản sửa đổi kế tiếp nào của các phiên bản tiêu chuẩn đều thay thế phiên bản trước đó, do đó, các tuyên bố về sự phù hợp với các phiên bản trước đó không có giá trị chính thức.

Không giống như Oracle, một số từ khóa hoặc toán tử vẫn tồn tại không tuân theo SQL chuẩn ANSI (Ngôn ngữ truy vấn có cấu trúc). Ví dụ, toán tử OUTER JOIN (+) có thể gây nhầm lẫn với các DBA khác chưa chạm vào hoặc ít quen thuộc nhất với Oracle. PostgreSQL tuân theo tiêu chuẩn ANSI-SQL cho cú pháp JOIN và điều đó tạo ra lợi thế để nhảy dễ dàng và đơn giản với cơ sở dữ liệu RDBMS mã nguồn mở khác như cơ sở dữ liệu MySQL / Percona / MariaDB.

Một cú pháp khác rất phổ biến với Oracle là sử dụng các truy vấn phân cấp. Oracle sử dụng cú pháp START WITH..CONNECT BY không chuẩn, trong khi trong SQL:1999, các truy vấn phân cấp được thực hiện theo cách đệ quy các biểu thức bảng chung. Ví dụ:các truy vấn dưới đây khác cú pháp của nó theo các truy vấn phân cấp:

Oracle

SELECT

    restaurant_name, 

    city_name 

FROM

    restaurants rs 

START WITH rs.city_name = 'TOKYO'

CONNECT BY PRIOR rs.restaurant_name = rs.city_name;

PostgreSQL

WITH RECURSIVE tmp AS (SELECT restaurant_name, city_name

                                 FROM restaurants

                                WHERE city_name = 'TOKYO'

                                UNION

                               SELECT m.restaurant_name, m.city_name

                                 FROM restaurants m

                                 JOIN tmp ON tmp.restaurant_name = m.city_name)

                  SELECT restaurant_name, city_name FROM tmp;

PostgreSQL có cách tiếp cận rất giống với RDBMS mã nguồn mở hàng đầu khác như MySQL / MariaDB.

Theo hướng dẫn sử dụng PostgreSQL, phát triển PostgreSQL nhằm mục đích tuân thủ phiên bản chính thức mới nhất của tiêu chuẩn trong đó sự tuân thủ đó không mâu thuẫn với các tính năng truyền thống hoặc thông thường. Nhiều tính năng theo yêu cầu của tiêu chuẩn SQL được hỗ trợ, mặc dù đôi khi có cú pháp hoặc chức năng hơi khác nhau. Trên thực tế, đây là điều tuyệt vời với PostgreSQL vì nó cũng được hỗ trợ và hợp tác bởi các tổ chức khác nhau, cho dù đó là quy mô nhỏ hay lớn. Vẻ đẹp vẫn dựa trên sự phù hợp của ngôn ngữ SQL với những gì đã được thông qua tiêu chuẩn.

Việc phát triển PostgreSQL nhằm mục đích tuân thủ phiên bản chính thức mới nhất của tiêu chuẩn trong đó sự tuân thủ đó không mâu thuẫn với các tính năng truyền thống hoặc quan điểm chung. Nhiều tính năng theo yêu cầu của tiêu chuẩn SQL được hỗ trợ, mặc dù đôi khi có cú pháp hoặc chức năng hơi khác nhau. Có thể mong đợi những động thái tiếp theo hướng tới sự tuân thủ theo thời gian.

Lý do thứ tư:Truy vấn song song

Công bằng mà nói, Tính song song Truy vấn của PostgreSQL không phong phú bằng khi so sánh với khả năng thực thi song song của Oracle cho các câu lệnh SQL. Trong số các tính năng mà tính song song của Oracle là xếp hàng đợi câu lệnh với gợi ý, khả năng đặt mức độ song song (DOP), đặt chính sách mức độ song song hoặc tính song song thích ứng.

PostgreSQL có mức độ song song đơn giản dựa trên các kế hoạch được hỗ trợ, nhưng điều đó không xác định rằng Oracle vượt trội so với mã nguồn mở PostgreSQL.

Tính song song của PostgreSQL đã được cộng đồng không ngừng cải thiện và nâng cao liên tục. Khi PostgreSQL 10 được phát hành, nó đã tăng thêm sức hấp dẫn đối với công chúng, đặc biệt là các cải tiến về hỗ trợ song song cho phép kết hợp, quét đống bitmap, quét chỉ mục và quét chỉ chỉ mục, tập hợp hợp nhất, v.v. Các cải tiến cũng bổ sung số liệu thống kê cho pg_stat_activity.

Trong các phiên bản PostgreSQL <10, tính song song bị tắt theo mặc định mà bạn cần đặt biến max_parallel_workers_per_gather.

postgres=# \timing

Timing is on.

postgres=# explain analyze select * from imdb.movies where birthyear >= 1980 and birthyear <=2005;

                                                   QUERY PLAN                                                   

----------------------------------------------------------------------------------------------------------------

 Seq Scan on movies  (cost=0.00..215677.28 rows=41630 width=68) (actual time=0.013..522.520 rows=84473 loops=1)

   Filter: ((birthyear >= 1980) AND (birthyear <= 2005))

   Rows Removed by Filter: 8241546

 Planning time: 0.039 ms

 Execution time: 525.195 ms

(5 rows)



Time: 525.582 ms

postgres=# \o /dev/null 

postgres=#  select * from imdb.movies where birthyear >= 1980 and birthyear <=2005;

Time: 596.947 ms

Kế hoạch truy vấn tiết lộ rằng thời gian thực có thể đi vào khoảng 522,5 mili giây thì thời gian thực thi truy vấn thực là khoảng 596,95 mili giây. Trong khi cho phép song song,

postgres=# set max_parallel_workers_per_gather=2;

Time: 0.247 ms

postgres=# explain analyze select * from imdb.movies where birthyear >= 1980 and birthyear <=2005;

                                                          QUERY PLAN                                                           

-------------------------------------------------------------------------------------------------------------------------------

 Gather  (cost=1000.00..147987.62 rows=41630 width=68) (actual time=0.172..339.258 rows=84473 loops=1)

   Workers Planned: 2

   Workers Launched: 2

   ->  Parallel Seq Scan on movies  (cost=0.00..142824.62 rows=17346 width=68) (actual time=0.029..264.980 rows=28158 loops=3)

         Filter: ((birthyear >= 1980) AND (birthyear <= 2005))

         Rows Removed by Filter: 2747182

 Planning time: 0.096 ms

 Execution time: 342.735 ms

(8 rows)



Time: 343.142 ms

postgres=# \o /dev/null

postgres=#  select * from imdb.movies where birthyear >= 1980 and birthyear <=2005;

Time: 346.020 ms

Kế hoạch truy vấn xác định rằng truy vấn cần sử dụng song song và sau đó nó sử dụng nút Gather. Thời gian thực ước tính là 339 mili giây với 2 công trình và ước tính là 264 mili giây trước khi được tổng hợp bởi kế hoạch truy vấn. Bây giờ, thời gian thực thi thực sự của truy vấn mất 346 mili giây, rất gần với thời gian thực tế ước tính từ kế hoạch truy vấn.

Điều này chỉ minh họa tốc độ và lợi ích của nó với PostgreSQL. Mặc dù PostgreSQL có những giới hạn riêng khi tính song song có thể xảy ra hoặc khi kế hoạch truy vấn xác định nó nhanh hơn so với sử dụng song song, nó không làm cho tính năng của nó có sự khác biệt lớn so với Oracle. Tính song song của PostgreSQL rất linh hoạt và có thể được bật hoặc sử dụng đúng cách miễn là truy vấn của bạn phù hợp với trình tự cần thiết cho tính song song của truy vấn.

Lý do thứ 5:Hỗ trợ JSON nâng cao và luôn cải tiến

Hỗ trợ JSON trong PostgreSQL luôn ngang bằng so với RDBMS mã nguồn mở khác. Hãy xem blog bên ngoài này từ LiveJournal, nơi hỗ trợ JSON của PostgreSQL cho thấy luôn nâng cao hơn khi so sánh với các RDBMS khác. PostgreSQL có một số lượng lớn các chức năng và tính năng JSON.

Kiểu dữ liệu JSON đã được giới thiệu trong PostgreSQL-9.2. Kể từ đó, nó đã có rất nhiều cải tiến đáng kể và trong số đó là sự bổ sung quan trọng trong PostgreSQL-9.4 với việc bổ sung kiểu dữ liệu JSONB. PostgreSQL cung cấp hai kiểu dữ liệu để lưu trữ dữ liệu JSON:json và jsonb. Với jsonb, nó là một phiên bản nâng cao của kiểu dữ liệu JSON lưu trữ dữ liệu JSON ở định dạng nhị phân. Đây là cải tiến lớn tạo ra sự khác biệt lớn đối với cách dữ liệu JSON được tìm kiếm và xử lý trong PostgreSQL.

Oracle cũng hỗ trợ rộng rãi JSON. Ngược lại, PostgreSQL có hỗ trợ rộng rãi cũng như các chức năng có thể được sử dụng để truy xuất dữ liệu, định dạng dữ liệu hoặc các hoạt động có điều kiện ảnh hưởng đến đầu ra của dữ liệu hoặc thậm chí dữ liệu được lưu trữ trong cơ sở dữ liệu. Dữ liệu được lưu trữ với kiểu dữ liệu jsonb có lợi thế lớn hơn với khả năng sử dụng GIN (Chỉ mục đảo ngược tổng quát) có thể được sử dụng để tìm kiếm hiệu quả các khóa hoặc cặp khóa / giá trị xuất hiện trong một số lượng lớn tài liệu jsonb.

PostgreSQL có các phần mở rộng bổ sung hữu ích để triển khai TRANSFORM FOR TYPE cho kiểu jsonb sang các ngôn ngữ thủ tục được hỗ trợ của nó. Các phần mở rộng này là jsonb_plperl và jsonb_plperlu cho PL / Perl. Trong khi đối với PL / Python, đây là jsonb_plpythonu, jsonb_plpython2u và jsonb_plpython3u. Ví dụ:sử dụng các giá trị jsonb để ánh xạ mảng Perl, bạn có thể sử dụng các phần mở rộng jsonb_plperl hoặc jsonb_plperlu.

ArangoDB đã đăng một điểm chuẩn so sánh hiệu suất JSON của PostgreSQL cùng với các cơ sở dữ liệu hỗ trợ JSON khác. Mặc dù đó là một blog cũ, nhưng nó vẫn cho thấy JSON của PostgreSQL hoạt động như thế nào so với các cơ sở dữ liệu khác mà JSON là tính năng cốt lõi của nó trong nhân cơ sở dữ liệu của họ. Điều này chỉ làm cho PostgreSQL có lợi thế riêng ngay cả với tính năng phụ của nó.

Lý do thứ sáu:Sự hỗ trợ của DBaaS bởi các nhà cung cấp đám mây lớn

PostgreSQL đã được hỗ trợ rộng rãi như một DBaaS. Các dịch vụ này đến từ Amazon, Microsoft với Cơ sở dữ liệu Azure cho PostgreSQL và Cloud SQL của Google cho PostgreSQL.

So với Oracle, chỉ có sẵn trên Amazon RDS cho Oracle. Các dịch vụ được cung cấp bởi các công ty lớn bắt đầu với giá cả phải chăng và rất linh hoạt để thiết lập phù hợp với nhu cầu của bạn. Điều này giúp các cơ quan và tổ chức thiết lập phù hợp và giảm bớt chi phí lớn bị ràng buộc trên nền tảng Oracle.

Lý do thứ bảy:Xử lý tốt hơn lượng dữ liệu khổng lồ

PostgreSQL RDBMS không được thiết kế để xử lý khối lượng công việc phân tích và lưu trữ dữ liệu. PostgreSQL là một cơ sở dữ liệu hướng hàng, nhưng nó có khả năng lưu trữ một lượng lớn dữ liệu. PostgreSQL có các giới hạn sau để xử lý kho dữ liệu:

Giới hạn

Giá trị

Kích thước cơ sở dữ liệu tối đa

Không giới hạn

Kích thước bảng tối đa

32 TB

Kích thước hàng tối đa

1,6 TB

Kích thước trường tối đa

1 GB

Hàng tối đa trên mỗi bảng

Không giới hạn

Số cột tối đa trên mỗi bảng

250-1600 tùy thuộc vào loại cột

Chỉ mục tối đa trên mỗi bảng

Không giới hạn

Lợi ích chính với PostgreSQL là đã có các plugin có thể được kết hợp để xử lý lượng lớn dữ liệu. TimeScaleDB và cstore_fdw của CitusData là một trong những plugin mà bạn có thể kết hợp cho cơ sở dữ liệu chuỗi thời gian, lưu trữ dữ liệu lớn từ các ứng dụng di động hoặc dữ liệu từ các ứng dụng IoT của bạn hoặc phân tích dữ liệu hoặc kho dữ liệu. Trên thực tế, ClusterControl cung cấp hỗ trợ TimeScaleDB giúp đơn giản nhưng dễ triển khai.

Nếu bạn muốn sử dụng các tính năng cốt lõi của PostgreSQL, bạn có thể lưu trữ lượng lớn dữ liệu bằng jsonb. Ví dụ:một lượng lớn tài liệu (PDF, Word, Bảng tính) và lưu trữ tài liệu này bằng cách sử dụng kiểu dữ liệu jsonb. Đối với các ứng dụng và hệ thống định vị địa lý, bạn có thể sử dụng PostGIS.

Lý do thứ tám:Khả năng mở rộng, Tính sẵn có cao, Dự phòng / Dự phòng theo địa lý và Giải pháp chịu lỗi với giá rẻ

Oracle cung cấp các giải pháp tương tự, nhưng mạnh mẽ, chẳng hạn như Oracle Grid, Oracle Real Application Cluster (RAC), Oracle Clusterware và Oracle Data Guard. Những công nghệ này có thể làm tăng chi phí của bạn và tốn kém không thể đoán trước để triển khai và ổn định. Thật khó để loại bỏ những giải pháp này. Đào tạo và kỹ năng phải được nâng cao và phát triển những người có liên quan trong quá trình triển khai và thực hiện.

PostgreSQL có sự hỗ trợ lớn và có rất nhiều tùy chọn để bạn lựa chọn. PostgreSQL bao gồm tính năng phát trực tuyến và sao chép logic được tích hợp sẵn trong gói cốt lõi của phần mềm. Bạn cũng có thể thiết lập một bản sao đồng bộ cho PostgreSQL để có nhiều cụm có tính khả dụng cao hơn, trong khi vẫn chuẩn bị cho quá trình xử lý các truy vấn đọc của bạn. Để có tính khả dụng cao, chúng tôi khuyên bạn nên đọc blog của chúng tôi Các giải pháp về tính khả dụng cao (HA) Top PG Clustering dành cho PostgreSQL và bao gồm rất nhiều công cụ và công nghệ tuyệt vời để bạn lựa chọn.

Ngoài ra còn có các tính năng dành cho doanh nghiệp cung cấp các giải pháp sao lưu, giám sát và tính sẵn sàng cao. ClusterControl là một trong những công nghệ này và cung cấp với giá cả phải chăng so với Giải pháp Oracle.

Lý do thứ 9:Hỗ trợ một số ngôn ngữ thủ tục:PL / pgSQL, PL / Tcl, PL / Perl và PL / Python.

Kể từ phiên bản 9.4, PostgreSQL có một tính năng tuyệt vời, nơi bạn có thể xác định một ngôn ngữ thủ tục mới theo sự lựa chọn của bạn. Mặc dù không phải tất cả các ngôn ngữ lập trình đều được hỗ trợ, nhưng nó có một số ngôn ngữ được hỗ trợ. Hiện tại, với phân phối cơ sở, nó bao gồm PL / pgSQL, PL / Tcl, PL / Perl và PL / Python. Các ngôn ngữ bên ngoài là:

Tên

Ngôn ngữ

Trang web

PL / Java

Java

https://tada.github.io/pljava/

PL / Lua

Lua

https://github.com/pllua/pllua

PL / R

R

https://github.com/postgres-plr/plr

PL / sh

Unix shell

https://github.com/petere/plsh

PL / v8

JavaScript

https://github.com/plv8/plv8

Điều tuyệt vời về điều này là, không giống như Oracle, các nhà phát triển mới bắt đầu sử dụng PostgreSQL có thể nhanh chóng cung cấp logic nghiệp vụ cho hệ thống ứng dụng của họ mà không cần mất thêm thời gian để tìm hiểu về PL / SQL. PostgreSQL làm cho môi trường dành cho các nhà phát triển dễ dàng và hiệu quả hơn. Bản chất này của PostgreSQL góp phần vào lý do tại sao các nhà phát triển yêu thích PostgreSQL và bắt đầu chuyển hướng sử dụng các giải pháp nền tảng doanh nghiệp sang môi trường nguồn mở.

Lý do Mười:Chỉ mục linh hoạt cho dữ liệu văn bản và lớn (GIN, GiST, SP-GiST và BRIN)

PostgreSQL có lợi thế rất lớn khi hỗ trợ các chỉ mục có lợi cho việc xử lý dữ liệu lớn. Oracle có rất nhiều kiểu chỉ mục cũng có lợi cho việc xử lý các tập dữ liệu lớn, đặc biệt là để lập chỉ mục toàn văn. Nhưng đối với PostgreSQL, các loại chỉ mục này được tạo ra để linh hoạt tùy theo mục đích của bạn. Ví dụ:các loại chỉ mục này có thể áp dụng cho dữ liệu lớn:

GIN - (Chỉ số Đảo ngược Tổng quát)

Loại chỉ mục này có thể áp dụng cho các cột kiểu dữ liệu jsonb, hstore, dải ô và mảng. Nó hữu ích khi bạn có kiểu dữ liệu chứa nhiều giá trị trong một cột. Theo tài liệu PostgreSQL, “GIN được thiết kế để xử lý các trường hợp trong đó các mục được lập chỉ mục là các giá trị tổng hợp và các truy vấn được chỉ mục xử lý cần tìm kiếm các giá trị phần tử xuất hiện trong các mục tổng hợp. Ví dụ:các mục có thể là tài liệu và các truy vấn có thể là tìm kiếm tài liệu có chứa các từ cụ thể. ”

GiST - (Cây Tìm kiếm Tổng quát)

Cây tìm kiếm cân bằng độ cao bao gồm các trang nút. Các nút bao gồm các hàng chỉ mục. Nói chung, mỗi hàng của một nút lá (hàng lá) chứa một số vị từ (biểu thức boolean) và một tham chiếu đến một hàng trong bảng (TID). Chỉ mục GiST là tốt nhất nếu bạn sử dụng chỉ mục này cho kiểu dữ liệu hình học như, bạn muốn xem liệu hai đa giác có chứa một điểm nào đó hay không. Trong một trường hợp, một điểm cụ thể có thể được chứa trong hộp, trong khi một điểm khác chỉ tồn tại trong một đa giác. Các kiểu dữ liệu phổ biến nhất mà bạn muốn tận dụng chỉ mục GiST là các loại hình học và văn bản khi xử lý tìm kiếm toàn văn bản

Khi chọn loại chỉ mục sẽ sử dụng, GiST hoặc GIN, hãy cân nhắc những khác biệt về hiệu suất sau:

  • Tra cứu chỉ mục GIN nhanh hơn GiST khoảng ba lần
  • Các chỉ mục GIN mất khoảng ba lần để xây dựng so với GiST
  • Chỉ mục GIN cập nhật chậm hơn vừa phải so với chỉ mục GiST, nhưng chậm hơn khoảng 10 lần nếu tắt hỗ trợ cập nhật nhanh
  • Chỉ mục GIN lớn hơn từ hai đến ba lần so với chỉ mục GiST

Theo nguyên tắc chung, chỉ mục GIN là tốt nhất cho dữ liệu tĩnh vì tra cứu nhanh hơn. Đối với dữ liệu động, chỉ mục GiST cập nhật nhanh hơn.

SP-GiST - (GiST được phân vùng theo không gian)

Dành cho các tập dữ liệu lớn hơn với phân nhóm tự nhiên nhưng không đồng đều. Loại chỉ mục này tận dụng các cây phân vùng không gian. Chỉ mục SP-GiST hữu ích nhất khi dữ liệu của bạn có phần tử phân cụm tự nhiên và cũng không phải là một cây cân bằng như nhau. Một ví dụ tuyệt vời về điều này là số điện thoại, chẳng hạn như ở Hoa Kỳ, chúng sử dụng định dạng sau:

  • 3 chữ số cho mã vùng
  • 3 chữ số cho tiền tố (trước đây có liên quan đến công tắc của nhà cung cấp dịch vụ điện thoại)
  • 4 chữ số cho số dòng

Điều này có nghĩa là bạn có một số cụm tự nhiên xung quanh bộ 3 chữ số đầu tiên, xung quanh bộ 3 chữ số thứ hai, khi đó các số có thể phân bố đều hơn. Tuy nhiên, với số điện thoại, một số mã vùng có độ bão hòa cao hơn nhiều so với những mã khác. Kết quả có thể là cây rất mất cân đối. Bởi vì sự phân nhóm tự nhiên đó và sự phân bổ không đồng đều của dữ liệu – dữ liệu như số điện thoại có thể tạo nên một trường hợp tốt cho SP-GiST.

BRIN - (Chỉ số phạm vi khối)

Dành cho các tập dữ liệu thực sự lớn xếp hàng tuần tự. Phạm vi khối là một nhóm các trang liền kề nhau, nơi thông tin tóm tắt về tất cả các trang đó được lưu trữ trong Chỉ mục. Chỉ mục phạm vi khối có thể tập trung vào một số trường hợp sử dụng tương tự như SP-GiST vì chúng tốt nhất khi có một số thứ tự tự nhiên đối với dữ liệu và dữ liệu có xu hướng rất lớn. Có một tỷ bảng ghi, đặc biệt nếu đó là dữ liệu chuỗi thời gian? BRIN có thể trợ giúp. Nếu bạn đang truy vấn một tập hợp lớn dữ liệu được nhóm lại với nhau một cách tự nhiên, chẳng hạn như dữ liệu cho một số mã zip (sau đó cuộn lên thành phố nào đó) BRIN giúp đảm bảo rằng các mã zip tương tự nằm gần nhau trên đĩa.

Khi bạn có tập dữ liệu rất lớn được sắp xếp theo thứ tự như ngày tháng hoặc mã zip, chỉ mục BRIN cho phép bạn bỏ qua hoặc loại trừ rất nhiều dữ liệu không cần thiết một cách nhanh chóng. BRIN cũng được duy trì dưới dạng các chỉ mục nhỏ hơn so với kích thước dữ liệu tổng thể, khiến chúng trở thành một chiến thắng lớn khi bạn có một tập dữ liệu lớn.

Kết luận

PostgreSQL có một số lợi thế lớn khi cạnh tranh với nền tảng doanh nghiệp và các giải pháp kinh doanh của Oracle. Chắc chắn rất dễ để coi PostgreSQL là lựa chọn hàng đầu của bạn về RDBMS mã nguồn mở vì nó gần như mạnh mẽ như Oracle.

Oracle rất khó đánh bại (và đó là sự thật khó chấp nhận) và cũng không dễ dàng để từ bỏ nền tảng doanh nghiệp của gã khổng lồ công nghệ. Khi hệ thống cung cấp cho bạn sức mạnh và kết quả hiệu quả, đó có thể là một tình thế tiến thoái lưỡng nan.

Đôi khi, có những tình huống phải đưa ra quyết định vì việc tiếp tục đầu tư quá mức vào chi phí nền tảng của bạn có thể lớn hơn chi phí của các lớp kinh doanh khác và các ưu tiên có thể ảnh hưởng đến tiến độ.

PostgreSQL và các giải pháp nền tảng cơ bản của nó có thể được lựa chọn để giúp bạn cắt giảm chi phí, giảm bớt các vấn đề về ngân sách của bạn; tất cả đều có những thay đổi vừa phải đến nhỏ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thứ tự đánh giá mệnh đề Oracle SQL

  2. Cách tìm xem một giá trị có tồn tại trong một VARRAY hay không

  3. tràn bộ đệm kích thước dbms_output

  4. Cách xóa Máy ảo khỏi VirtualBox

  5. 2 cách để định dạng kết quả truy vấn của bạn trong SQLcl (Oracle)