intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Nghiên cứu kỹ thuật tiền xử lý dữ liệu trong tối ưu truy vấn cơ sở dữ liệu có kích thước lớn

Chia sẻ: ViSumika2711 ViSumika2711 | Ngày: | Loại File: PDF | Số trang:12

57
lượt xem
3
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài viết đề xuất kỹ thuật tiền xử lý dữ liệu nhằm tạo ra các dữ liệu có những định dạng phù hợp mà có thể kết hợp với những kỹ thuật truyền thống nhằm tối ưu các truy vấn cơ sở dữ liệu có kích thước lớn. Bài viết đồng thời cũng phân lớp và đề xuất mô hình triển khai cho việc tiền xử lý dữ liệu một cách hiệu quả.

Chủ đề:
Lưu

Nội dung Text: Nghiên cứu kỹ thuật tiền xử lý dữ liệu trong tối ưu truy vấn cơ sở dữ liệu có kích thước lớn

Công nghệ thông tin<br /> <br /> NGHIÊN CỨU KỸ THUẬT TIỀN XỬ LÝ DỮ LIỆU TRONG<br /> TỐI ƯU TRUY VẤN CƠ SỞ DỮ LIỆU CÓ KÍCH THƯỚC LỚN<br /> Cao Đăng Huy*, Nguyễn Nhật An<br /> Tóm tắt: Tối ưu hóa cơ sở dữ liệu là một vấn đề rất quan trọng trong việc xây<br /> dựng các ứng dụng cơ sở dữ liệu. Có nhiều công nghệ và kỹ thuật được áp dụng cho<br /> việc tối ưu cơ sở dữ liệu như đặt chỉ mục, phân mảnh dữ liệu…vv; tuy nhiên với ứng<br /> dụng có dữ liệu quá lớn hoặc có tần suất truy cập đồng thời rất cao và những truy vấn<br /> dữ liệu khá phức tạp thì những kỹ thuật này chỉ có thể đạt đến một giới hạn nhất định<br /> nào đó. Trong bài viết này chúng tôi đề xuất kỹ thuật tiền xử lý dữ liệu nhằm tạo ra<br /> các dữ liệu có những định dạng phù hợp mà có thể kết hợp với những kỹ thuật truyền<br /> thống nhằm tối ưu các truy vấn cơ sở dữ liệu có kích thước lớn. Bài viết đồng thời<br /> cũng phân lớp và đề xuất mô hình triển khai cho việc tiền xử lý dữ liệu một cách hiệu<br /> quả. Kết quả thử nghiệm cho bài toán reverse geocode trên dữ liệu không gian trên<br /> tập dữ liệu mẫu mà chúng tôi đề xuất có thể cải thiện tốc độ hơn 54 lần và việc triển<br /> khai nó trong thực tế cho phép chúng tôi có thể tạo ra được những báo cáo về dữ liệu<br /> của hàng trăm triệu đến hàng chục tỷ bản ghi trong thời gian chấp nhận được. Điều<br /> này cho thấy cách tiếp cận này là rất khả quan.<br /> Từ khóa: Tối ưu cơ sở dữ liệu; Tiền xử lý; Phân mảnh dữ liệu.<br /> <br /> 1. ĐẶT VẤN ĐỀ<br /> Tối ưu hóa về cơ sở dữ liệu là một chủ đề rất được quan tâm và nghiên cứu.<br /> Khi xây dựng một hệ thống phần mềm với một cơ sở dữ liệu lớn, có nhiều truy vấn<br /> và cập nhật đồng thời thì vấn đề này là cực kỳ quan trọng vì nó ảnh hưởng rất lớn<br /> đến sự đáp ứng của hệ thống, trải nghiệm người dùng, thậm chí là sự ổn định, tồn<br /> vong của cả một hệ thống phần mềm.<br /> Có nhiều giải pháp để tối ưu hóa cơ sở dữ liệu như chuẩn hóa thiết kế, đặt<br /> chỉ mục index hợp lý, thiết lập cấu hình hệ thống, tối ưu các câu hỏi truy vấn và<br /> phân mảnh dữ liệu [4]. Tuy nhiên với dữ liệu có kích thước quá lớn hoặc có tần<br /> suất truy cập rất cao mà câu hỏi truy vấn dữ liệu lại phức tạp thì những giải pháp<br /> này chỉ đạt đến một giới hạn nhất định. Đòi hỏi phải có một giải pháp mới để xử lý<br /> vấn đề này và chúng tôi đề xuất là sử dụng kỹ thuật tiền xử lý dữ liệu.<br /> Tiền xử lý dữ liệu là quá trình biến đổi dữ liệu sang một định dạng mới<br /> phục vụ cho một quá trình phân tích, xử lý dữ liệu nào đó. Thuật ngữ này là khá<br /> phổ biến trong khai phá dữ liệu, trí tuệ nhân tạo, xử lý ngôn ngữ và học máy…vv.<br /> Tuy nhiên trong bài viết này đề cập đến một phạm vi hẹp là sử dụng kỹ thuật tiền<br /> xử lý dữ liệu để tối ưu các truy vấn dữ liệu.<br /> Như chúng ta đã biết hiện nay đa số các cơ sở dữ liệu dựa trên mô hình dữ<br /> liệu quan hệ bởi tính tiện lợi, toàn vẹn và nhất quán của dữ liệu. trong đó tất cả các<br /> thông tin của nó được lưu trữ trong các bảng có các cột và hàng và có mối quan hệ<br /> với nhau. Các truy vấn đến dữ liệu được thông qua ngôn ngữ truy vấn có cấu trúc<br /> SQL để trích xuất một phần hoặc toàn bộ dữ liệu trong các bảng này. Ngôn ngữ<br /> truy vấn có cấu trúc SQL chủ yếu dựa trên các phép toán của đại số quan hệ. Gồm<br /> <br /> <br /> 208 C. Đ. Huy, N. N. An, “Nghiên cứu kỹ thuật tiền xử lý … dữ liệu có kích thước lớn.”<br /> Thông tin khoa học công nghệ<br /> <br /> các phép toán 1 ngôi như chọn, phép chiếu, phép gán, phép đổi tên và các phép<br /> toán 2 ngôi như tích decac, giao (Intersection), hợp (union), hiệu (minus), nối<br /> (join), chia (Division). Ngoài ra các hệ quản trị cơ sở dữ liệu hiện đại còn tích hợp<br /> thêm một số phép toán như các hàm tập hợp (Aggregate function), Gom nhóm các<br /> bộ dữ liệu (Grouping) và Phép kết mở rộng (Outer Join). Các thực thể trong cơ sở<br /> dữ liệu quan hệ được phân biệt với nhau thông qua giá trị của nó do vậy cơ sở dữ<br /> liệu quan hệ là cơ sở dữ liệu hướng giá trị (value oriented). Các bộ hay bản ghi của<br /> dữ liệu được phân biệt với nhau bởi các giá trị của nó do vậy việc lựa chọn trích<br /> xuất dữ liệu trong cơ sở dữ liệu hoàn toàn dựa vào giá trị của dữ liệu<br /> Việc truy vấn dựa trên giá trị của dữ liệu sẽ có những hạn chế nhất định về<br /> mặt tốc độ nhất là khi dữ liệu có kích thước lớn do phải thực hiện việc quét (scan)<br /> dữ liệu trong các bảng. Hiệu năng của một truy vấn được dựa trên chi phí (cost) mà<br /> truy vấn đó chiếm dụng tài nguyên hệ thống:<br /> cA(all)=cD(lưu trữ)+cM(Memory)+cN(Networking)+cL(lock)+cC(CPU) [7]<br /> Trong đó:<br /> cD: là chi phí đọc ghi đĩa lưu trữ (bộ nhớ ngoài) liên quan đến truy vấn<br /> cM: chi phí thao tác đến bộ nhớ trong liên quan đến truy vấn<br /> cN: chi phí về truyền thông mạng là số băng thông mạng mà truy vấn chiếm<br /> dụng<br /> cL: là chi phí liên quan đến tranh chấp khóa của truy vấn. Các cơ sở dữ liệu<br /> hiện đại đưa các khóa (lock) vào để quản lý việc truy cập đồng thời và các chỉ mục<br /> (index) để tối ưu truy vấn và việc thay đổi cũng như đọc dữ liệu vì vậy sẽ tiêu tốn<br /> tài nguyên của hệ thống liên quan đến khóa<br /> cC: phí phí liên quan đến tài nguyên chiếm dụng CPU của truy vấn.<br /> Hiệu năng của một hệ thống cơ sở dữ liệu là tổng chi phí của tất cả các yêu<br /> cầu truy vấn phát sinh trong một đơn vị thời gian :<br /> <br /> <br /> <br /> Trong đó N là số truy vấn trong một đơn vị thời gian, cj là chi phí của truy<br /> vấn j<br /> Như vậy mấu chốt của vấn đề là muốn nâng cao hiệu năng của hệ thống thì<br /> phải giảm chi phí tài nguyên của các truy vấn đến cơ sở dữ liệu.<br /> Ngoài việc chuẩn hóa thiết kế để tránh dư thừa dữ liệu và đảm bảo tính toàn<br /> vẹn, chuẩn hóa và tối ưu các câu lệnh sql để cải thiện hiệu năng truy vấn, các hệ<br /> quản trị cơ sở dữ liệu đưa việc đặt chỉ mục (index) để đảm bảo rằng thay vì việc tìm<br /> dữ liệu trong một danh sách không được sắp xếp thì chuyển việc tìm kiếm trong<br /> một danh sách đã được sắp xếp. Ngoài ra các hệ quản trị cơ sở dữ liệu hiện đại đưa<br /> <br /> <br /> <br /> <br /> Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san CNTT, 11 - 2018 209<br /> Công nghệ thông tin<br /> <br /> ra các công nghệ về phân mảnh dữ liệu đó là quá trình phân chia dữ liệu thành<br /> nhiều đoạn và việc phân chia này cũng dựa trên các chỉ mục index [4].<br /> Trên thực tế có nhiều dạng dữ liệu mà việc đặt chỉ mục là không hề dễ dàng<br /> ví dụ như những dữ liệu không có cấu trúc hoặc có cấu trúc phức tạp như dữ liệu<br /> không gian. Các chỉ mục chỉ hiệu quả khi chúng được tìm kiếm và so sánh dựa trên<br /> các toán tử (operator) và sẽ mất hoàn toàn hiệu quả khi sử dụng các hàm (function)<br /> dù nó là hàm của hệ quản trị cơ sở dữ liệu (system function), hàm do người dùng tự<br /> định nghĩa (user define function) hay hàm của các tool bổ sung thêm (add in<br /> function). Trong trường hợp này việc đặt chỉ mục và phân mảnh dựa trên các dữ<br /> liệu hiện có nhằm tối ưu tối ưu truy vấn là rất khó để thực hiện đòi hỏi chúng ta<br /> phải tạo ra các dữ liệu mới thì mới có thể đặt chỉ mục được [5],[6]<br /> Với cơ sở dữ liệu có kích thước lớn (hàng trăm triệu đến hàng trăm tỷ bản<br /> ghi và dung lượng có thể đạt đến nhiều TB dữ liệu) các truy vấn có thể lấy dữ liệu<br /> từ nhiều bảng thì việc truy vấn dữ liệu rất chậm và trong rất nhiều trường hợp là<br /> không khả thi, khả năng đáp ứng đồng thời nhiều truy vấn cùng lúc là rất khó và có<br /> thể gây nên hiện tượng dead lock (khóa chết) gián đoạn hệ thống và tệ hơn có thể<br /> gây nên việc hỏng và mất dữ liệu. Ngoài ra với những hệ thống có số lượng truy<br /> cập truy vấn dữ liệu đồng thời rất lớn như truy vấn thông tin địa chỉ trên bản đồ<br /> reverse geocode thì mặc dù khối lượng dữ liệu có thể không quá lớn nhưng tần suất<br /> quá lớn (hàng vạn thậm chí hàng chục triệu truy vấn đồng thời) cũng có thể gây nên<br /> quá tải hệ thống đòi hỏi chúng ta phải có giải pháp để nâng cao hiệu năng của các<br /> truy vấn đến cơ sở dữ liệu.<br /> Chúng tôi đề xuất giải pháp là dùng kỹ thuật tiền xử lý dữ liệu để nâng cao<br /> tính hiệu quả của các truy vấn cơ sở dữ liệu. Đó là những kỹ thuật tính toán, xử lý<br /> trước để tạo ra các định dạng dữ liệu mới nhằm cải thiện hiệu năng một cách rõ rệt<br /> cho việc truy vấn dữ liệu. Các kỹ thuật này đã được chúng tôi áp dụng và mang lại<br /> một hiệu quả rõ rệt cho những hệ thống có kích thước dữ liệu tương đối lớn hoặc có<br /> nhiều truy cập khai thác đồng thời. Chúng tôi phân loại tiền xử lý dữ liệu thành 2<br /> dạng là tạo ra các dữ liệu trên cũng một bảng truy vấn và tạo ra một số bảng dữ liệu<br /> tóm tắt hoàn toàn mới dựa trên việc rút gọn và tóm tắt các dữ liệu hiện có và đề<br /> xuất mô hình xử lý đối với hai dạng dữ liệu đó.<br /> 2. MÔ HÌNH TIỀN XỬ LÝ DỮ LIỆU TRONG TỐI ƯU TRUY VẤN<br /> Tiền xử lý dữ liệu chính là bước tạo ra các dữ liệu trung gian với một định<br /> dạng và nội dung phù hợp mà dựa trên nó chúng ta có thể cải thiện một cách hiệu<br /> quả hiệu năng truy vấn đến cơ sở dữ liệu và thậm chí là hiệu năng trong quản lý bảo<br /> trì và lưu trữ dữ liệu.<br /> Dựa trên đặc tính và định dạng của dữ liệu và nội dung truy vấn chúng tôi<br /> đề xuất hai mô hình tiền xử lý dữ liệu.<br /> <br /> <br /> 210 C. Đ. Huy, N. N. An, “Nghiên cứu kỹ thuật tiền xử lý … dữ liệu có kích thước lớn.”<br /> Thông tin khoa học công nghệ<br /> <br /> 2.1. Tiền xử lý tạo ra các các dữ liệu trên cùng một bảng truy vấn.<br /> Kỹ thuật này được áp dụng đối với những truy vấn liên quan đến bảng có kích<br /> thước dữ liệu khá lớn hoặc tần suất khai thác nhiều lần mà các truy vấn đến nó là<br /> rất khó khăn trong việc thiết kế và sử dụng chỉ mục index, các điều kiện tìm kiếm<br /> sau lệnh where hoặc join là rất phức tạp đòi hỏi chi phí tính toán lớn cũng như chi<br /> phí về quét dữ liệu khi scan bảng đòi hỏi phải đọc dữ liệu rất nhiều từ toàn bộ bảng.<br /> Để giải quyết vấn đề này chúng ta sẽ tạo thêm một hoặc một số cột dữ liệu ở<br /> trên bảng mà giá trị của nó được tính toán dựa trên các cột hiện có và có định dạng<br /> phù hợp cho việc tạo chỉ mục cũng như hỗ trợ tốt việc phân mảnh dữ liệu nếu có<br /> (trong trường hợp số lượng bản ghi của bảng quá lớn). Thực chất của quá trình này<br /> là chúng ta đã phi chuẩn hóa về dữ liệu (de-normal) tạo ra các phụ thuộc hàm dựa<br /> trên các thuộc tính hiện có của bảng. Với những cột mới này chúng ta sẽ tạo chỉ<br /> mục tìm kiếm phù hợp và chỉnh sửa lại nội dung cú pháp các câu lệnh truy vấn để<br /> hướng đến việc sử dụng chỉ mục và phân đoạn bảng (với các bảng có dữ liệu lớn)<br /> Để thực hiện việc tiền xử lý trên cùng một bảng chúng ta sẽ thực hiện các bước<br /> như sau:<br /> <br /> <br /> <br /> <br /> Hình 1. sơ đồ các bước tiền xử lý dữ liệu trên cùng một bảng.<br /> Bước 1: Phân tích kích bản thực thi của truy vấn SQL hiện có, phân tích các<br /> tham số đầu vào Input của truy vấn và thứ tự các thao tác vật lý và logic mà bộ thực<br /> thi truy vấn của hệ quản trị cơ sở dữ liệu thực hiện để xử lý và trả kết quả truy vấn.<br /> Đặc biệt chú ý đến việc quét bảng và chỉ mục để tìm các tiến trình và thao tác có<br /> chi phí lớn nhất và có khả năng cải thiện được nhiều nhất. Chúng ta có thể sử dụng<br /> các công cụ hiện có của hệ quản trị cơ sở dữ liệu để thực hiện điều này. Ví dụ trong<br /> sql server chúng ta có thể sử dụng công cụ Estimated Execution Plan.<br /> Bước 2: Thêm các cột nhằm phục vụ cho việc tính toán tiền xử lý vào bảng liên<br /> quan đến truy vấn. Cột thêm vào nhằm tạo chỉ mục tìm kiếm và tối ưu hóa phép<br /> chọn. Tạo chỉ mục index từ các cột vừa tạo. Nếu dữ liệu của bảng quá lớn (>1GB)<br /> thì có thể phân mảnh bảng dữ liệu dựa trên chỉ mục vừa tạo để cải thiện hiệu suất<br /> quét bảng và truy vấn.<br /> <br /> <br /> Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san CNTT, 11 - 2018 211<br /> Công nghệ thông tin<br /> <br /> Bước 3: Cập nhật các số liệu tiền xử lý vào các cột đã tạo mới một cách chính<br /> xác trong các tiến trình nền.<br /> Bước 4: Bổ sung các điều kiện lọc hướng tới chỉ mục tìm kiếm vào câu lệnh<br /> truy vấn SQL. điều kiện lọc liên quan đến chỉ mục phải được ưu tiên đầu tiên trong<br /> các điều kiện lọc sau lệnh where và lệnh join. Với bảng phân đoạn thì điều kiện lọc<br /> liên quan đến chỉ mục của phân đoạn bảng phải được nằm ở vị trí ưu tiên cao nhất<br /> trong thứ tự các điều kiện lọc này. Tránh tuyệt đối sử dụng hàm trong các điều kiện<br /> lọc mới bổ sung thêm.<br /> 2.2. Tiền xử lý tóm tắt dữ liệu từ nhiều bảng<br /> Kỹ thuật này được áp dụng trên những truy vấn mà cần lấy dữ liệu từ nhiều<br /> bảng với khối lượng dữ liệu rất lớn có thể lên đến nhiều tỷ bản ghi vì vậy truy vấn<br /> cần phải có nhiều phép hợp union và phép nối join trên nhiều bảng, và do nó quét<br /> dữ liệu từ nhiều bảng rất lớn nên chiếm dụng I/O đĩa cứng, tài nguyên khóa và CPU<br /> nên nó sẽ không thể chạy được trong thời gian chấp nhận được cũng như có thể gây<br /> treo hệ thống, deadlock (khóa chết) thậm chí là hỏng hóc dữ liệu. Với những truy<br /> vấn kiểu này chúng tôi đề xuất là xây dựng những bảng dữ liệu trung gian lưu trữ<br /> các dữ liệu tổng hợp và tóm tắt để phục vụ cho việc tối ưu tốc độ của các truy vấn<br /> liên quan đến tổng hợp dữ liệu<br /> Các dữ liệu tóm tắt sẽ được thiết kế theo nguyên tắc sau:Dựa trên định dạng<br /> thông tin đầu ra của các truy vấn<br /> - Các dữ liệu tóm tắt có số lượng bản ghi ít hơn nhiều lần so với số lượng bản<br /> ghi của dữ liệu gốc và chứa đựng các nguyên tố của truy vấn đầu ra.<br /> - Dữ liệu tóm tắt được đánh chỉ mục index dựa trên các tham số đầu vào của<br /> truy vấn.<br /> - Bảng dữ liệu quá lớn (>2GB) có thể phân mảnh dựa trên thông tin trong chỉ<br /> mục index để tối ưu hóa tốc độ truy vấn và quản lý cũng như bảo trì hiệu<br /> quả dữ liệu.<br /> Để thực hiện việc tiền xử lý tóm tắt dữ liệu chúng ta sẽ thực hiện các bước<br /> như sau:<br /> <br /> <br /> <br /> <br /> Hình 2. sơ đồ các bước tiền xử lý tóm tắt dữ liệu từ nhiều bảng.<br /> <br /> <br /> 212 C. Đ. Huy, N. N. An, “Nghiên cứu kỹ thuật tiền xử lý … dữ liệu có kích thước lớn.”<br /> Thông tin khoa học công nghệ<br /> <br /> Bước 1: Phân tích về tần suất các truy vấn và nội dung dữ liệu tổng hợp của<br /> các truy vấn, nghiên cứu về các định dạng dữ liệu đầu ra và xác định nguyên tố của<br /> các truy vấn đầu ra ví dụ chúng ta cần truy vấn tổng hợp của các cá nhân, phòng<br /> ban của một công ty trong một ngày, tháng, năm thì bản ghi nguyên tố chính là tổng<br /> hợp trong ngày của một cá nhân. Như vậy các thông tin tổng hợp của cá<br /> nhân,phòng ban trong một khoảng thời gian ngày, tháng có thể được lấy từ các<br /> thông tin tổng hợp của các cá nhân trong một số ngày nào đó.<br /> Bước 2: thiết kế các bảng dữ liệu tóm tắt chứa các bản ghi là các thông tin<br /> tóm tắt về dữ liệu phục vụ cho mục đích truy vấn mỗi hàng là một nguyên tố<br /> (atomic) của các dữ liệu báo cáo đầu ra, Xây dựng các chỉ mục tìm kiếm liên quan<br /> đến các điều kiện lọc của dữ liệu, phân mảnh dữ liệu nếu cần. Kích thước bảng này<br /> bé hơn rất nhiều lần so với dữ liệu gốc<br /> Bước 3: xây dựng các tiến trình nền Background process để tiền xử lý dữ<br /> liệu nhằm ghi nhận dữ liệu vào các bảng tóm tắt mà chúng ta xây dựng ở bước 3.<br /> Bước 4: Sửa đổi các câu lệnh truy vấn để truy cập dữ liệu trực tiếp vào các<br /> bảng tóm tắt thay vì tổng hợp từ nhiều bảng. lưu ý về sử dụng chỉ mục trong các<br /> câu lệnh tóm tắt này để nâng cao hiệu năng truy vấn.<br /> 3. THỬ NGHIỆM VÀ ĐÁNH GIÁ<br /> Chúng ta sẽ thử nghiệm trên bài toán truy vấn thông tin địa lý mà cụ thể là<br /> địa chỉ trên nền bản đồ reverse geocoding trên dữ liệu không gian địa lý trong SQL<br /> Server 2014. Đây là một bài toán rất quan trọng và có ý nghĩa ứng dụng rất lớn và<br /> là một tính năng cơ bản của các công cụ bản đồ nổi tiếng Google map, Bing map<br /> hay việt bản đồ…vv. Bài toán này được ứng dụng nhiều trên các sản phẩm thương<br /> mại như Uber, Grab…vv. Một số đặc điểm đáng chú ý trong bài toán này là chúng<br /> có số lượng truy vấn đồng thời rất lớn có thể đạt đến hàng triệu, hàng chục triệu từ<br /> những nguồn dữ liệu có cấu trúc phức tạp như dữ liệu không gian vốn là khá khó<br /> khăn trong việc đánh chỉ mục để tìm kiếm.<br /> 3.1. Bài toán gốc<br /> Cơ sở dữ liệu mẫu chúng tôi dùng để thử nghiệm là cơ sở dữ liệu không<br /> gian có 2 lớp địa lý là lớp Địa danh hành chính (Tỉnh, huyện, xã) và lớp đường giao<br /> thông của Việt Nam và được tổ chức vào 2 bảng như sau:<br /> Bảng 1. Cấu trúc bảng dữ liệu gốc tblVillage.<br /> Tên cột Loại dữ liệu Loại cột Mô tả<br /> VillageID smallint Khóa chính Mã địa danh<br /> VillageName Nvarchar(30) Tên xã phường<br /> DistrictName Nvarchar(30) Tên quận, huyện<br /> ProvinceName Nvarchar(30) Tên tỉnh, thành phố<br /> <br /> <br /> Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san CNTT, 11 - 2018 213<br /> Công nghệ thông tin<br /> <br /> Geom Geometry Dữ liệu không<br /> gian<br /> Dữ liệu này bao gồm lớp hành chính của gần 12.000 xã phường ở Việt Nam<br /> bao gồm cả dữ liệu không gian chứa đựng trong trường Geom<br /> Bảng 2. Cấu trúc bảng dữ liệu gốc tblRoad.<br /> Tên cột Loại dữ liệu Loại cột<br /> RoadID int Khóa chính Mã đường<br /> RoadName Nvarchar(80) Tên đường<br /> RoadType tinyint Loại đường:cao tốc, quốc lô,<br /> tỉnh lộ<br /> Geom geometry Dữ liệu không gian<br /> Dữ liệu đường giao thông mà chung tôi thử nghiệm gồm khoảng hơn 200.000<br /> đoạn đường giao thông ở Việt Nam. Nó bao gồm Gần như tất cả các đường giao<br /> thông có tên trên bản đồ google map đến quý 2 năm 2017<br /> Truy vấn mà chúng tôi minh họa ở đây là truy vấn truy vấn địa chỉ dựa trên tọa<br /> độ đầu vào reverse geocoding, tham số đầu vào là tọa độ GPS tại một điểm trên bản<br /> đồ số và đầu ra là địa chỉ của điểm đó (tên đường, xã phường, quận huyện, tỉnh<br /> thành phố). Đây là một truy vấn có tần suất rất lớn trên các dịch vụ bản đồ của<br /> goole map, bing map và việt bản đồ.<br /> Để lấy kết quả chúng ta cần thực hiện 2 truy vấn trên 2 bảng khác nhau là<br /> tblVilage và tblRoad<br /> Để lấy thông tin địa chỉ xã phường, quận huyện, tỉnh thành phố chúng ta sẽ<br /> thực hiện query sau:<br /> declare @Point geometry,@str nvarchar(60), @str nvarchar(60)@Lng<br /> decimal(9,6)=105.7993966,@Lat decimal(8,6)=21.0435112<br /> set @Point=geometry::Point(@Lng,@Lat,4326)<br /> select @str=VilageName+', '+DistrictName+', '+ProvinceName from tblVilage<br /> where Geom.STIntersects(@Point)=1<br /> select @str=RoadName+’, ’+@str from tblRoad where<br /> Geom.STDistance(@Point)
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0