Đăng lại câu hỏi được hỏi trên Stack Overflow khi được đề xuất đây sẽ là một diễn đàn tốt hơn.
Tôi đang thử một thử nghiệm nhỏ trong việc đẩy một tập dữ liệu không phải là không gian địa lý nhưng phù hợp với nó khá tốt và đang tìm thấy kết quả hơi đáng lo ngại. Tập dữ liệu là dữ liệu gen, ví dụ Bộ gen người nơi chúng ta có một vùng DNA nơi các yếu tố như gen chiếm tọa độ bắt đầu và dừng cụ thể (trục X của chúng ta). Chúng ta có nhiều vùng DNA (nhiễm sắc thể) chiếm trục Y. Mục tiêu là mang lại tất cả các mục giao nhau với hai tọa độ X dọc theo tọa độ Y duy nhất, ví dụ LineString (START 1, END 2).
Lý thuyết có vẻ hợp lý nên tôi đã đẩy nó vào một dự án genome dựa trên MySQL hiện có và đưa ra một cấu trúc bảng như:
CREATE TABLE `spatial_feature` (
`spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`external_id` int(10) unsigned NOT NULL,
`external_type` int(3) unsigned NOT NULL,
`location` geometry NOT NULL,
PRIMARY KEY (`spatial_feature_id`),
SPATIAL KEY `sf_location_idx` (`location`)
) ENGINE=MyISAM;
external_id
đại diện cho định danh của thực thể mà chúng ta đã mã hóa vào bảng này và external_type
mã hóa nguồn của thực thể này. Mọi thứ đều ổn và tôi đã đẩy một số dữ liệu sơ bộ (30.000 hàng) có vẻ hoạt động tốt. Khi điều này tăng vượt qua mốc 3 triệu hàng, MySQL đã từ chối sử dụng chỉ số không gian và chậm hơn khi buộc phải sử dụng nó (40 giây so với 5 giây khi quét toàn bộ bảng). Khi thêm dữ liệu, chỉ mục bắt đầu được sử dụng nhưng hình phạt hiệu suất vẫn tồn tại. Buộc chỉ mục tắt đưa truy vấn xuống còn 8 giây. Truy vấn tôi đang sử dụng trông giống như:
select count(*)
from spatial_feature
where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location);
Dữ liệu đi vào đây rất dày đặc dọc theo kích thước Y (hãy nghĩ rằng nó giống như bạn đã ghi lại vị trí của mọi tòa nhà, hộp điện thoại, hộp thư và chim bồ câu trên một con đường rất dài). Tôi đã thực hiện các thử nghiệm về cách R-Index hoạt động với dữ liệu này trong Java cũng như các mục khác trong trường đã áp dụng chúng cho các định dạng tệp phẳng thành công. Tuy nhiên, không ai đã áp dụng chúng cho cơ sở dữ liệu AFAIK, mục tiêu của thử nghiệm này.
Có ai ở ngoài đó đã thấy một hành vi tương tự khi thêm một lượng lớn dữ liệu vào một mô hình không gian không khác biệt lắm dọc theo một trục cụ thể không? Vấn đề vẫn còn nếu tôi đảo ngược việc sử dụng tọa độ. Tôi đang chạy thiết lập sau nếu đó là một nguyên nhân
- MacOS 10.6.6
- MySQL 5.1.46