Khi Phiên bản với ArcSDE có thể đăng các chỉnh sửa bị hủy hoặc từ chối?


28

Tôi đang sử dụng ArcGIS 9.3.1 và đang cố gắng làm việc với cơ sở dữ liệu địa lý SDE (với một lớp tính năng đa giác) đã được đăng ký như phiên bản. Tôi mới tham gia phiên bản và vẫn đang cố gắng tìm ra một số chức năng cơ bản của nó. Cho đến nay, tôi vẫn chưa thể khám phá liệu có thể "hủy" hoặc "từ chối" một số chỉnh sửa nhất định sau khi chúng được đăng lên phiên bản gốc hay không.

Ví dụ: giả sử chúng tôi có ba phiên bản: SDE.DEFAULT ban đầu được tạo khi được đăng ký là phiên bản, phiên bản con của mặc định có tên SDE.QA (cho Đảm bảo chất lượng) và phiên bản con của QA được gọi là SDE .Edit1 (nơi diễn ra lần chỉnh sửa đầu tiên). Nếu một số tính năng nhất định của SDE.Edit1 đã được chỉnh sửa (ví dụ: để đơn giản, giả sử một đa giác đã được thêm và một đã bị xóa) và sau đó SDE.Edit1 đã được đối chiếu với SDE.QA và sau đó được đăng lên SDE.QA, sẽ có có cách nào để hoàn tác thay đổi này không? Theo dõi câu hỏi này, liệu có thể từ chối một số thay đổi không? Ví dụ, chấp nhận thêm poly đầu tiên, nhưng từ chối loại bỏ poly thứ hai?

Theo như tôi có thể nói, một khi các chỉnh sửa đã được đăng lên phiên bản gốc, tất cả những thay đổi này hiện là một phần "vĩnh viễn" (vì không có từ nào tốt hơn) của phiên bản gốc. Tôi biết rằng tất cả các thay đổi này đều được ghi lại trong hai bảng, bảng "THÊM" và "XÓA" (thường được gọi là bảng "delta") và không thực sự thay đổi chính FC gốc. Tôi đã xem xét việc thay đổi thủ công các bảng delta này, nhưng tôi thấy đủ người cảnh báo chống lại điều đó để biết rằng đó có thể không phải là giải pháp phù hợp.

Có lẽ sự hiểu biết của tôi về phiên bản cần một số công việc, nhưng dường như tôi không thể tìm ra cách từ chối thay đổi hoặc hoàn tác một thay đổi sau khi nó được đăng. Điều này có vẻ lạ đối với tôi, vì điều này có nghĩa là không có cách nào để hoàn tác một bài đăng có lỗi. Tôi dường như cũng không thể tìm ra cách truy tìm dòng dõi của các phiên bản này (tức là phiên bản nào là con của cha mẹ). Trong khi tôi đang ở trong chủ đề này, nếu bất kỳ ai có thể biết về bất kỳ tài liệu tham khảo ArcSDE đặc biệt hữu ích nào (liên kết, bài viết, sách, v.v.) có thể giúp tôi hiểu về ArcSDE (và có thể trả lời một số câu hỏi này), nó sẽ được đánh giá cao !


Mặc dù câu trả lời cho đến nay vẫn hữu ích (cảm ơn bạn về các liên kết), tôi vẫn không thể tìm thấy câu trả lời cho cốt lõi của câu hỏi của mình. Một lần nữa, có lẽ đó là sự hiểu lầm của riêng tôi về tình huống này. Đây là những gì tôi muốn biết:

Bạn có thể đảo ngược (ngược lại, ý tôi là hoàn tác ) một bài đăng khi nó đã được tạo từ phiên bản con sang phiên bản gốc? Trong trường hợp này, cha mẹ có thể, nhưng không nhất thiết phải là phiên bản SDE.DEFAULT. Thậm chí tốt hơn, tôi muốn biết nếu bạn có thể đảo ngược một phần của bài đăng (giả sử, một chỉnh sửa duy nhất thành đa giác), sau khi nó đã được đăng? Tôi cũng muốn biết nếu điều này có thể được thực hiện mà không cần phải có bất kỳ xung đột nào được phát hiện.

Việc tôi không thể tìm thấy câu trả lời rõ ràng cho câu hỏi này (nghĩa là "có" hoặc "không") được ghi lại ở bất cứ đâu khiến tôi nghĩ rằng tôi đang thiếu một cái gì đó quan trọng về phiên bản trong ArcSDE. Tôi cũng muốn tránh thao tác các bảng A và D bằng tay.


? phiên bản & rdbms sẽ giúp
Brad Nesom

Câu trả lời:


53

Ừ Câu trả lời thực sự là một câu hỏi phức tạp đòi hỏi nhiều nền tảng ArcSDE, vì vậy tôi sẽ cố gắng ngắn gọn nhất có thể.

Lưu ý Tôi sẽ đề cập đến một số sơ đồ từ sách trắng phiên bản siêu tuyệt vời mà bạn có thể tìm thấy trong trang web ESRI . Nếu bạn đang xử lý phiên bản, tôi cực kỳ khuyến khích bạn đọc nó xuyên suốt.

Sau đó, bạn cần hiểu mối quan hệ giữa một trạng thái (tức là một nút từ cây trạng thái) và một phiên bản được đặt tên (tức là một nhãn trỏ đến một trạng thái).

Một cơ sở dữ liệu điển hình có thể trông giống như sơ đồ trạng thái bên dưới:

sơ đồ cơ sở dữ liệu arcsde điển hình

Tại đây, bạn có bốn phiên bản trong cơ sở dữ liệu (Phiên bản A, Phiên bản B, Phiên bản C và DEFAULT). Nhưng có lẽ, tôi đang đi trước một chút. Hãy bắt đầu với trạng thái của nó.

Bạn có thể nghĩ về một trạng thái như một "giao dịch" - một đơn vị logic có chứa một số chỉnh sửa cho một - hoặc nhiều - bảng. Nó có thể bao gồm hai phần chèn vào "FeatureClass A", xóa từ "Lớp tính năng B" và sửa đổi (có hiệu quả là xóa + chèn) thành "Lớp tính năng X". Tất cả được nhóm lại thành một.

Hãy xem sơ đồ trạng thái ArcSDE nhỏ, đơn giản bắt đầu ở trạng thái id 0:

chuyển nhà nước

Nếu bạn bắt đầu ở trạng thái 0 và bạn chỉnh sửa thành một hoặc nhiều bảng trong thao tác chỉnh sửa, bạn sẽ tạo trạng thái con 1 và biến đó thành trạng thái hoạt động hiện tại . Một nhóm chỉnh sửa tiếp theo sẽ tạo trạng thái con 2. Nếu bạn muốn hoàn tác, bạn không cần sửa đổi id trạng thái theo bất kỳ cách nào - tất cả những gì bạn cần làm là thay đổi id trạng thái hoạt động hiện tại thành 1 hoặc 0 (tùy thuộc vào bạn muốn đi bao xa Làm lại là ngược lại - chỉ cần di chuyển id trạng thái hoạt động hiện tại về phía trước - xa như bạn muốn đi.

Đó là cách hoàn tác / làm lại trong phiên bản ArcSDE.

OK, di chuyển trên. Giả sử bạn muốn chỉnh sửa vĩnh viễn (nghĩa là bạn muốn lưu). Làm những gì bạn phải làm? Chà, tiết kiệm chỉ là lấy một nhãn phiên bản và chuyển nó sang một trạng thái cụ thể. Kiểu như dập nó và nói "đây là phiên bản A phải như thế nào". Vì vậy, nếu bạn nhìn lại sơ đồ đầu tiên, bạn sẽ thấy rằng nó có bốn phiên bản được đặt tên .

  • Phiên bản B trỏ đến trạng thái id 1
  • Phiên bản A trỏ đến trạng thái id 3
  • Phiên bản C trỏ đến trạng thái id 5
  • Phiên bản "SDE.DEFAULT" trỏ đến trạng thái id 4

    Xin lưu ý rằng sơ đồ này, mặc dù có niềm tin phổ biến, không cho bạn biết bất cứ điều gì về mối quan hệ cha-con hợp lý mà họ có. Mối quan hệ cha-con hợp lý cho sơ đồ đầu tiên có thể có hiệu quả như sau:

cấu trúc phiên bản logic

Đây là mối quan hệ cha-con mà bạn thấy trong ArcMap / ArcCatalog. Mục đích của nó là hạn chế những phiên bản nào bạn có thể dung hòa được. Tại thời điểm này, bạn có thể (chính xác) tự hỏi mình, tại sao tôi cần cái này? Câu trả lời, nằm trong quy trình làm việc phiên bản . Hóa ra, mọi người đã sử dụng phiên bản khá lâu và có một số cách ưa thích về cách cấu trúc những thứ này, nhưng đó là một chủ đề cho một ngày khác kể từ khi tôi muốn trả lời câu hỏi của bạn ngày hôm nay :)

Tiếp tục ...

OK, vậy những phiên bản được đặt tên này làm gì khác? Chà, chúng ảnh hưởng đến cách quá trình này được gọi là hành vi nén .

Nén là tất cả về việc lấy các trạng thái trung gian có thể không cần thiết và loại bỏ các trạng thái không cần thiết cũng như kết hợp chúng. Bạn có thể kích hoạt hoạt động nén ArcSDE thông qua ArcCatalog, thiết lập một dịch vụ thực hiện từng bước một và một số thao tác chỉnh sửa ArcMap sẽ kích hoạt các hoạt động nén mini (tức là chỉ cho các nhánh nhỏ đang được sử dụng).

Biểu đồ bên trái hiển thị một cây trạng thái trước khi nó được nén và cây bên phải hiển thị nó ngay sau khi nó được nén:

sơ đồ nén

Một khái niệm quan trọng cần hiểu (mà tôi sẽ đề cập đến bạn một khi cuối cùng tôi cũng trả lời được câu hỏi của bạn) là mỗi trạng thái là một ứng cử viên tiềm năng cần được nén - ngoại trừ các trạng thái có nhãn (tức là phiên bản được đặt tên) chỉ vào chúng.

Bạn có thể thấy rằng trước khi nén, có một số trạng thái không cần thiết. Trên thực tế, toàn bộ [3,4,5] chi nhánh đã bị xóa. Đã có một phiên bản được đặt tên ở mức 5, kết quả cuối cùng sẽ rất khác.

Hoạt động nén có sẵn để tiết kiệm không gian trên cơ sở dữ liệu của bạn bằng cách xóa các bản ghi bạn không cần nữa.

OK, di chuyển trên.

Khái niệm cuối cùng mà bạn cần hiểu, là hòa giải - đó là hợp nhất hiệu quả hai nhánh thành một.

Vì vậy, hãy quay trở lại sơ đồ đầu tiên của chúng tôi. Giả sử bạn muốn điều hòa Phiên bản A với SDE.DEFAULT.

Chúng ta hãy tóm tắt lại: bốn phiên bản được đặt tên chỉ vào các id trạng thái khác nhau. Vì vậy, điều đầu tiên chúng ta phải làm là tạo trạng thái con theo phiên bản đích, vì vậy chúng ta tạo trạng thái con theo trạng thái id 4, trong ví dụ của chúng ta, tôi gọi trạng thái đó là id 20.

bắt đầu hòa giải

Bước tiếp theo là tính toán sự khác biệt giữa cả hai phiên bản (chi tiết quá dài cho bài đăng này, nhưng tôi có thể nói với bạn rằng chúng được thực hiện với các con trỏ khác nhau ) và sau đó áp dụng những khác biệt đó cho id trạng thái mới 20 (dòng màu xanh).

hòa giải đẩy

Giả sử bạn quyết định thực hiện thêm các chỉnh sửa hoặc bạn đã tìm thấy xung đột và đang chọn các hàng từ một phiên bản hoặc phiên bản khác. Nó không thành vấn đề. Đó chỉ là những chỉnh sửa mới và được thực hiện trong một thao tác chỉnh sửa, vì các trạng thái con bên dưới nhánh mà bạn đã hợp nhất. Trong ví dụ này, tôi đã thực hiện thêm hai nhóm chỉnh sửa liên tiếp sau khi hòa giải.

chỉnh sửa sau khi hòa giải

Đáng yêu.

Vì vậy, bây giờ nói rằng bạn đã sẵn sàng " đăng " phiên bản. Điều đó nghĩa là gì? Đó chỉ là lấy các nhãn và trỏ chúng vào cùng một id trạng thái. Ở đây, tôi sẽ đăng Phiên bản A lên SDE.DEFAULT. Đây là những gì nó trông giống như:

đăng

TADAAA! Vì vậy, bây giờ Phiên bản A và SDE.DEFAULT đang trỏ đến cùng một id trạng thái và do đó chúng trông giống nhau.

OK, vì vậy bây giờ tôi cuối cùng có thể trả lời câu hỏi của bạn.

Bạn có thể hoàn tác một bài viết? Tài liệu ArcGIS sẽ cho bạn biết không - đừng gây rối với nó. Đừng làm điều đó, bởi vì bạn sẽ bị rối với logic này và nếu bạn không biết bạn đang làm gì, bạn có thể làm hỏng dữ liệu của mình.

Nhưng trên thực tế, tất cả chỉ cần thực hiện một bản cập nhật của một trong các bảng Phiên bản ArcSDE - bảng VERSION và sửa đổi mục nhập của nhãn (còn gọi là phiên bản có tên). Trong ví dụ của chúng tôi, hãy trỏ đến trạng thái id 21 và bạn vừa hoàn tác toàn bộ thao tác chỉnh sửa đó. Đặt nó thành 3 và bạn chỉ cần hủy toàn bộ phần đối chiếu. Đặt nó thành 5, và bây giờ bạn đang ở một nơi hoàn toàn khác. Cho dù có hay không có xung đột là không liên quan.

Tất nhiên, điều này giả định rằng việc nén đã không xảy ra. Hãy xem xét trường hợp nén xảy ra đúng vào cùng thời điểm bạn đang cập nhật bảng SDE. Hãy nhớ rằng, nếu bạn - hoặc ai đó - thực hiện nén sau khi bạn đăng thì đây là cây trông như thế nào:

nén sau bài

Bạn có thể hoàn tác việc hòa giải sau khi nén không? Vâng, trong trường hợp này, không . Việc nén đã thổi bay toàn bộ chi nhánh, do đó bạn không thể hoàn tác - dữ liệu đó đã bị xóa. Nếu có một phiên bản được đặt tên khác trên nhánh đó, thì nén sẽ không phá hủy nhánh đó. Tôi hy vọng rằng bây giờ điều này có ý nghĩa.

Vì vậy, bạn nên làm điều này? Tùy thuộc vào bạn, nếu bạn không biết những gì bạn đang làm, bạn có thể dễ dàng mất dữ liệu sau khi nén.


4
Ragi trả lời tuyệt vời! Phiên bản SDE là một con thú phức tạp.
blah238

2
Cảm ơn. Tôi đã duy trì / mở rộng mã đối chiếu trong ArcObjects trong ba năm vì vậy tôi đã chơi điều chỉnh hành vi này trong các bản phát hành ArcGIS khác nhau. Tôi đã bỏ qua một vài điều để cố gắng đơn giản hóa các khái niệm. Tôi hy vọng nó là đủ rõ ràng như là một câu trả lời.
Ragi Yaser Burhum

2
Cảm ơn bạn đã trả lời rất kỹ lưỡng, Ragi! Tôi cảm thấy bây giờ tôi đã hiểu rõ hơn về những gì tôi đang tham gia. Giải thích của bạn về việc chỉ đến một id trạng thái khác như một cơ chế để "hoàn tác" một thay đổi (hoặc có thể "lùi lại một bước" sẽ là một mô tả đầy đủ hơn) có ý nghĩa. Tôi vẫn đang khám phá liên kết Bảng Phiên bản ArcSDE mà bạn cung cấp. Trong mọi trường hợp, tôi sẽ lấy lời khuyên của bạn và tiến hành thận trọng. Cảm ơn một lần nữa vì đã dành thời gian để đi qua từng bước này!
Sole23

2
+1 Đánh dấu trang này. Tôi nghĩ rằng nó minh họa tại sao hầu hết mọi người không nên mày mò với các bảng phiên bản SDE và tôi sẽ gửi liên kết đến câu trả lời này khi tôi biết về những người đang nghĩ về nó!
Jay Cummins

2
Ồ, bạn đã nhận xét về một trong những câu hỏi của tôi và tôi đã dành vài giờ qua để đọc và đọc tất cả các câu hỏi bạn đã trả lời. Công cụ tuyệt vời, cảm ơn.
ianbroad

7

Có một công cụ gọi là Geodatabase Toolset (GDBT), đây là một plugin cho ArcCatalog. Nó trực quan hóa linage nhà nước và các phiên bản:

Tải về GDBT tại đây


Cảm ơn, Stefan. Đây chính xác là thứ mà tôi đã hy vọng tồn tại! Điều này giúp dễ hình dung và theo dõi dòng dõi SDE FC của tôi hơn nhiều.
Duy nhất 23

2
Ngoài ra, hầu hết mọi người không biết điều này, nhưng (miễn là các trạng thái chưa được nén hoàn toàn), bạn có thể thêm một mục vào bảng VERSION cho bất kỳ id trạng thái nào còn hợp lệ, sau đó sử dụng arcgis để vui vẻ duyệt, chỉnh sửa và thậm chí điều hòa phiên bản đó bằng các công cụ ArcGIS tiêu chuẩn. Các phiên bản chỉ là nhãn cho id trạng thái buộc ArcSDE giữ cho các trạng thái đó tồn tại.
Ragi Yaser Burhum

OK, hãy để tôi thực hiện một câu trả lời công phu hơn.
Ragi Yaser Burhum

3

Thiếu hiểu biết về phiên bản và db. đây là một số thông tin ban đầu sẽ giúp bạn
Quản trị viên cơ bản
Dưới đây là một số thông tin về recpost
Vì vậy, nếu bạn áp dụng các khái niệm này và sử dụng lệnh thay đổi phiên bản, bạn vẫn có cơ hội từ chối những thay đổi đó khi bạn rec và đăng lên mặc định.

Bạn không có ba bản sao của cùng một cơ sở dữ liệu.
Bạn có một bản sao với các phiên bản.
Nếu bạn đang quản trị db này, bạn thực sự sẽ dành thời gian (thậm chí là tiền) và làm quen với tất cả những điều này.
Lớp công việc chỉnh sửa phiên bản esri cho Cơ sở dữ liệu địa lý đa người dùng là miễn phí và sẽ giúp một số người.
Nhưng monte đầy đủ sẽ là những gì tôi đề nghị cho một người quản lý bất kỳ loại công việc chỉnh sửa sde phiên bản nào.
Lớp học đó thật tuyệt! để hiểu quy trình chỉnh sửa theo phiên bản cho Cơ sở dữ liệu địa lý đa người dùng .


Cảm ơn phản hồi của bạn, Brad. Tôi sẽ xem xét các liên kết và các lớp bạn đề nghị!
Duy nhất 23

các liên kết này dành cho máy chủ sql - nhưng có các tệp trợ giúp rdbms khác rất gần với các tệp này.
Brad Nesom

1
Tôi đã xem bản ghi âm miễn phí của hội thảo Esri mà bạn đề xuất: Quy trình chỉnh sửa phiên bản cho Cơ sở dữ liệu địa lý đa người dùng . Tôi nghĩ rằng nó thực sự hữu ích và chắc chắn xứng đáng với thời gian để xem nó (~ 1 giờ). Cảm ơn một lần nữa cho các khuyến nghị. Tôi cũng tìm thấy một liên kết để xem câu trả lời mà họ phải trả lời thêm câu hỏi mà họ không có thời gian để trả lời trong buổi hội thảo tại đây .
Duy nhất

3

Tôi có một cách "nhanh và bẩn". Chuyển ove sang phiên bản mặc định và chỉnh sửa một cái gì đó về đa giác đã bị xóa. Sau đó, khi bạn hòa giải thành mặc định, bạn sẽ gặp xung đột. Nhấp chuột phải vào xung đột và bảo nó sử dụng trạng thái hòa giải trước. Nó làm việc cho tôi.


1

Vâng, bạn có thể làm điều này, nhưng bạn sẽ phải làm điều đó bằng SQL.

TÔI KHÔNG CÓ ĐIỀU NÀY, LÀM VIỆC NÀY RỦI RO RIÊNG CỦA BẠN. LUÔN LUÔN QUAY LẠI DỮ LIỆU CỦA BẠN TRƯỚC KHI CHỈNH SỬA SDE.

Bạn có thể truy vấn bảng sde.versions để lấy state_id từ phiên bản mà bạn đã đăng với những thay đổi bạn muốn hoàn tác. Sau đó, bạn có thể đi đến bảng A và D và xóa các mục khớp với state_id.

    SELECT *
    FROM SDE.VERSIONS
    WHERE NAME = 'Version of interest';

Bây giờ bạn có trạng thái quan tâm. Bây giờ bạn cần tìm các bảng A và D cho lớp tính năng. Bạn làm điều này bằng cách truy vấn bảng_regology. Giá trị sẽ là register_id. Vì vậy, để có được bảng A và D, chỉ cần thêm register_id vào A và D.

    REGISTRATION_ID = 1
    A table would be A1
    D table would be D1

Sau đó, chỉ cần truy vấn cả bảng A và D và xóa các mục có state_id khỏi truy vấn trên.

Để tìm hiểu thêm về mối quan hệ cha mẹ và con cái, chỉ cần truy vấn từ các bảng sde sau đây.

    state_lineages
    versions
    states

Tất cả đều có mối quan hệ và sẽ giúp bạn theo dõi bóng nảy.


1

Không thể hoàn tác các chỉnh sửa một khi chúng đã được đăng từ phiên bản con sang phiên bản gốc. Xem: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00270000001s000000.htm

Thao tác bài không thể hoàn tác, vì bạn đang áp dụng các thay đổi cho phiên bản mà bạn hiện không chỉnh sửa.

Bạn có thể xem lại các chỉnh sửa được thực hiện trong mỗi phiên bản trong quá trình đối chiếu - đây sẽ là cơ hội để bạn từ chối các chỉnh sửa nhất định. Quá trình hòa giải được giải thích ở đây .


1

Vâng, như những người khác đã nói câu trả lời ngắn gọn là không.

Phiên bản SDE rất hứa hẹn nhưng thật không may là quy trình làm việc của nó chỉ giả định thay đổi về phía trước trong các tính năng.

Phiên bản đầy đủ tính năng trong SDE sẽ cung cấp các công cụ-

  • Cho phép khôi phục (cấp tính năng) và chấp nhận / từ chối
  • Sẽ cho phép hoàn tác
  • Và sẽ cho phép hoàn tác các trạng thái trước đó (tức là bắt đầu từ stat 3, hoàn tác các thay đổi từ trạng thái 1 nhưng giữ các thay đổi từ trạng thái 2).

Điều này sẽ giống như một hệ thống phiên bản kiểm soát mã nguồn SVN nhưng cho các tính năng không gian.


Xin chào David, vâng, đó là những gì tôi đã nghĩ trong khi xem xét phiên bản. Thật không may, quy trình làm việc hiện tại không hoàn toàn mang lại sự linh hoạt như vậy, nhưng tôi cho rằng đó là một công việc đang tiến triển và có thể cuối cùng nó sẽ làm được.
Duy nhất

1
Chà, nếu dữ liệu không bao giờ nén thì theo lý thuyết bạn có thể quay lại bao nhiêu tùy thích. Vấn đề là cơ sở dữ liệu tham gia trở nên rất chậm và hệ thống dần xuống cấp đến mức không thể sử dụng được. Vấn đề khác với quản lý kiểm soát nguồn trong đó một repo nguồn git khổng lồ như kernel linux hiện tại ~ 175MB. Trong địa lý, đó sẽ là một vấn đề lớn hơn nhiều. Tuy nhiên, những người thực sự thông minh đang nghĩ về vấn đề này ngay bây giờ. Xem Geogit: blog.opengeo.org/tag/geogit
Ragi Yaser Burhum

0

Câu trả lời đơn giản là không có.

Mục đích của việc đăng một phiên bản là cam kết những chỉnh sửa đó với phiên bản đích.

Rollback được thực hiện bằng cách không đăng phiên bản (và đó là cách tốt để xóa bất kỳ phiên bản bị bỏ rơi như vậy).

Trong khi chỉnh sửa phiên bản, ứng dụng chỉnh sửa (ví dụ ArcMap) có thể cung cấp nhiều cấp độ 'hoàn tác' khác nhau và người dùng có thể chọn lưu / không lưu các chỉnh sửa đó vào phiên bản đang được chỉnh sửa.

Nhưng sau khi đăng lên một mục tiêu (ví dụ: sde.default), cách duy nhất để hoàn tác là thông qua các bản hack đến các bảng hệ thống sde.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.