2011-08-02 13 views
5

Chúng tôi đang phát triển hệ thống theo dõi xe. Giống như mọi VTS, chúng tôi có các thiết bị GPS được gắn vào các phương tiện tiếp tục gửi thông tin vị trí đến máy chủ. Trên máy chủ, quá trình giao tiếp TCP của chúng tôi tiếp tục đọc dữ liệu đó và lưu nó vào cơ sở dữ liệu Bây giờ, chúng ta cần kiểm tra một số quy tắc để kích hoạt cảnh báo cho các phương tiện, ví dụ như chúng ta cần cảnh giác khi xe đến một địa điểm cụ thể. vượt qua giới hạn tốc độ cụ thể, v.v. Bạn có thể đề xuất cách tốt nhất để triển khai không? Chúng tôi đã nghĩ ra một số cách để thực hiện nó, 1. Người giao tiếp TCP của chúng tôi, khi nhận được vị trí, nên kiểm tra các cảnh báo. 2. Sẽ có một quy trình sẽ tiếp tục chạy sau mỗi 15 phút và kiểm tra chi tiết vị trí trong 15 phút đó đối với các cảnh báo.Cách tốt nhất để thực hiện kiểm tra quy tắc trong khi liên lạc với thiết bị GPS

Tôi đang tìm kiếm các đề xuất để triển khai nó, logic-khôn ngoan cũng như công nghệ khôn ngoan. ví dụ. Cho dù chúng ta nên sử dụng Drools hay không ?, v.v.

+0

là không có ai? Tôi cần một số gợi ý không phải là câu trả lời hoàn hảo. – Saurabh

Trả lời

6

Ai đó từ FedEx thực sự đã trình bày một cái gì đó như thế này trong một hội nghị JavaOne tôi đã tham dự một vài năm trở lại.

Về cơ bản, ý tưởng là, có, sử dụng Drools Expert + Fusion để thực hiện CEP (xử lý sự kiện phức tạp) trên dữ liệu vị trí của xe. Theo như tôi có thể nhớ lại, một chiếc xe sẽ định kỳ (cứ sau vài giây) gửi tọa độ GPS của nó đến động cơ (một sự kiện) mà sau đó sẽ được tiêu hóa bởi công cụ quy tắc, và tùy thuộc vào các quy tắc có thể kích hoạt một số hành động nhất định như tăng cảnh báo ("xe bị đình trệ" hoặc "ngoài khóa học") hoặc gửi thông báo ("xe sẽ đến đích trong ~ 15 phút").

(Google cho "drools fusion cep vehicle tracking" phát hiện ra this trình bày mà nên cung cấp cho bạn vài chi tiết hoặc ít nhất là cung cấp một số cái nhìn sâu sắc.)

+0

Cảm ơn AlistairIsrael. Có vẻ như thông tin bạn đã chia sẻ chắc chắn sẽ giúp tôi vì địa chỉ đó cùng địa chỉ. – Saurabh

2

cách Drools hoạt động, là bạn điền vào rất nhiều đối tượng vào "Bộ nhớ làm việc" của Drools. Trong khi bạn điền vào các đối tượng, Drools sẽ tìm ra các quy tắc "cháy" trên các đối tượng và lưu trữ các đối tượng trong một Rete-Tree. Khi bạn hoàn thành việc đặt các đối tượng trong bộ nhớ và bạn kích hoạt tất cả các quy tắc, Drools sẽ xử lý mã bạn đã viết tương ứng với quy tắc.

Tôi khuyên bạn nên tạo một đối tượng có tất cả dữ liệu được nhận từ xe cần thiết cho quy tắc của bạn và đặt nó vào bộ nhớ hoạt động.

Trong Drools bạn nên thực hiện nhiều quy tắc nhỏ, mỗi chỉ kiểm tra một điều và hành động trên kết quả. Nó không phải là một thực hành tốt để cho Drools có được dữ liệu cần thiết để đánh giá, nhưng tôi không thể thấy bất kỳ vấn đề nào trong việc cho phép Drools kích hoạt một số sự kiện, gửi tin nhắn đến một chiếc xe hoặc một số hệ thống khác. (Tôi đoán điều đó sẽ xảy ra không đồng bộ, để bạn không làm chậm Drools) Trong thực tế, Drools cung cấp cho bạn để treo lên một eventlistener.

0

Không có lý do gì để chạy sau mỗi 15 phút. Điều đó sẽ giới thiệu sự chậm trễ trong các kích hoạt và cũng dẫn đến các vụ nổ tải mỗi 15 phút tiếp theo là thời gian không tải.

Bạn có thể có một lá cờ trong cơ sở dữ liệu của mình cho các quy tắc cảnh báo mới và dữ liệu vị trí mới. Khi bạn quét tìm sự kiện, bạn có thể sử dụng phương pháp hai bước. Kiểm tra tất cả các quy tắc mới chống lại tất cả dữ liệu vị trí và đánh dấu chúng không còn mới nữa. Sau đó kiểm tra tất cả dữ liệu vị trí mới dựa trên các quy tắc hiện tại và đánh dấu chúng không còn mới nữa.

Bạn có thể chạy ứng dụng này bao nhiêu lần tùy thích. Lý tưởng nhất, bạn sẽ không chờ đợi lâu như vậy bởi vì bạn còn chờ đợi, công việc bạn tích lũy nhiều hơn.

Đối với việc giao tiếp TCP kiểm tra các cảnh báo có liên quan trong quá trình quét cơ sở dữ liệu theo định kỳ, ưu điểm chính sẽ là cảnh báo ngay lập tức. Điểm bất lợi là việc xử lý cảnh báo sẽ làm chậm đường dẫn giao tiếp TCP và bạn sẽ bị khóa vào một mô hình "một bản cập nhật có nghĩa là một kiểm tra cho cảnh báo".

Trong phương pháp "quét cơ sở dữ liệu", nếu tải quá cao, bạn chỉ có thể kiểm tra cảnh báo trên mọi bản cập nhật từ nguồn cập nhật tần số cao. Điều này tự nhiên đề với tải bằng cách giảm số lượng công việc cần thiết, nhưng nó có thể dẫn đến một cảnh báo bị mất.

Tôi nghĩ rằng tất cả các cách tiếp cận bạn đang xem xét sẽ hoạt động tốt.

Các vấn đề liên quan