Máy ảnh, cửa xoay, thang máy, cảm biến nhiệt độ, chuông báo - tất cả những thiết bị này tạo ra một số lượng lớn các tín hiệu được kết nối với nhau có liên quan đến các sự kiện xảy ra xung quanh chúng ta. Bây giờ, hãy tưởng tượng bạn là người cần theo dõi trạng thái, tạo báo cáo thời gian thực và đưa ra dự đoán dựa trên tất cả dữ liệu tín hiệu này. Để làm điều này, trước tiên bạn cần lưu trữ dữ liệu đó. Mô hình dữ liệu hỗ trợ xử lý tín hiệu như vậy là chủ đề của bài viết hôm nay.
Cách đơn giản nhất để lưu trữ các tín hiệu đến là chỉ cần lưu trữ một bản trình bày dạng văn bản của chúng trong một danh sách khổng lồ. Cách tiếp cận này sẽ cho phép chúng tôi thực hiện chèn nhanh chóng, nhưng các bản cập nhật sẽ có vấn đề. Ngoài ra, một mô hình như vậy sẽ không được chuẩn hóa và do đó chúng tôi sẽ không đi theo hướng đó.
Chúng tôi sẽ tạo một mô hình dữ liệu chuẩn hóa có thể được sử dụng để lưu trữ dữ liệu do các thiết bị khác nhau tạo ra và cũng xác định mức độ liên quan của các thiết bị. Một mô hình như vậy sẽ lưu trữ hiệu quả mọi thứ chúng ta cần và cũng có thể được sử dụng để phân tích và phân tích dự đoán.
Mô hình dữ liệu
Mô hình dữ liệu xử lý tín hiệu
Mô hình bao gồm ba lĩnh vực chủ đề:
-
Complexes
-
Installations & Devices
-
Signals & Events
Chúng tôi sẽ mô tả từng lĩnh vực chủ đề này theo thứ tự được liệt kê.
Phức hợp
Trong khi tạo mô hình dữ liệu này, tôi đã giả định rằng chúng tôi sẽ sử dụng nó để theo dõi những gì đang xảy ra trong các khu phức hợp lớn hơn. Các khu phức hợp có quy mô khác nhau, từ phòng đơn đến trung tâm mua sắm. Điều quan trọng là mỗi khu phức hợp phải có ít nhất một thiết bị / cảm biến, nhưng nó có thể sẽ có nhiều thiết bị / cảm biến khác.
Trước khi mô tả các khu phức hợp, chúng ta cần xác định các quốc gia và thành phố xử lý bảng. Chúng sẽ cung cấp một mô tả khá chi tiết về vị trí của từng khu phức hợp.
Đối với mỗi country
, chúng tôi sẽ lưu trữ country_name
DUY NHẤT của nó; cho mỗi city
, chúng tôi sẽ lưu trữ sự kết hợp DUY NHẤT của postal_code
, city_name
và country_id
. Tôi sẽ không đi vào chi tiết ở đây và chúng tôi sẽ giả định rằng mỗi thành phố chỉ có một mã bưu điện. Trên thực tế, hầu hết các thành phố sẽ có nhiều hơn một mã bưu điện; trong trường hợp đó, chúng tôi có thể sử dụng mã chính cho mỗi thành phố.
Một complex
là tòa nhà thực tế hoặc vị trí nơi các thiết bị tạo dữ liệu được lắp đặt. Như đã nêu trước đây, các khu phức hợp có thể thay đổi từ một phòng đơn hoặc một trạm đo đến những nơi lớn hơn nhiều như bãi đậu xe, trung tâm mua sắm, rạp chiếu phim, v.v. Chúng là chủ đề phân tích của chúng tôi. Chúng tôi muốn có thể theo dõi những gì đang xảy ra ở mức độ phức tạp trong thời gian thực và sau đó, tạo báo cáo và phân tích. Đối với mỗi phức hợp, chúng tôi sẽ xác định:
-
complex_code
- Một định danh DUY NHẤT cho mỗi phức hợp. Mặc dù chúng tôi có một thuộc tính khóa chính riêng biệt (id
) đối với bảng này, chúng tôi có thể mong đợi rằng chúng tôi sẽ kế thừa một mã nhận dạng khác cho từng khu phức hợp từ một hệ thống khác. -
complex_name
- Một cái tên dùng để mô tả khu phức hợp đó. Trong trường hợp trung tâm mua sắm và rạp chiếu phim, đây có thể là tên thực tế và nổi tiếng của chúng; đối với một trạm đo, chúng tôi có thể sử dụng một tên chung. -
city_id
- Tham chiếu đến thành phố nơi có khu phức hợp. -
address
- Địa chỉ thực của khu phức hợp đó. -
position
- Vị trí của khu phức hợp (tức là tọa độ địa lý) được xác định ở định dạng văn bản. -
description
- Mô tả bằng văn bản mô tả kỹ hơn khu phức hợp này. -
ts_inserted
- Dấu thời gian khi bản ghi này được chèn. -
is_active
- Giá trị boolean biểu thị nếu phức hợp này còn hoạt động hay không.
Cài đặt và Thiết bị
Bây giờ chúng tôi đang tiến gần hơn đến trọng tâm của mô hình của chúng tôi. Chúng tôi có thể sẽ có một số thiết bị được lắp đặt trong mỗi khu phức hợp. Chúng tôi cũng gần như chắc chắn sẽ nhóm các thiết bị này dựa trên mục đích của chúng - ví dụ:chúng ta có thể đặt camera, cảm biến cửa và một động cơ dùng để đóng và mở cửa trong một nhóm vì chúng hoạt động cùng nhau.
Trong mô hình của chúng tôi, các thiết bị hoạt động cùng nhau trong một khu phức hợp được nhóm lại thành các cài đặt. Chúng có thể dành cho cửa trước, thang cuốn, cảm biến nhiệt độ, v.v. Đối với mỗi cài đặt, chúng tôi sẽ lưu trữ các chi tiết sau trong installation
bảng:
-
installation_code
- Mã DUY NHẤT được sử dụng để biểu thị cài đặt đó. -
installation type_id
- Tham chiếu đếninstallation_type
từ điển. Từ điển này chỉ lưu trữ mộttype_name
DUY NHẤT thuộc tính mô tả loại, ví dụ:thang cuốn, thang máy. -
complex_id
- Tham chiếu đếncomplex
cài đặt đó thuộc về. -
position
- Tọa độ, ở định dạng văn bản, của cài đặt đó bên trong khu phức hợp. -
description
- Mô tả bằng văn bản về cài đặt đó. -
current_status_id
- Tham chiếu đến trạng thái hiện tại (từinstallation_status
bảng) của cài đặt đó. -
ts_inserted
- Dấu thời gian khi bản ghi này được chèn vào hệ thống của chúng tôi.
Chúng tôi đã đề cập đến các trạng thái cài đặt. Danh sách tất cả các trạng thái có thể có được lưu trữ trong installation_status
từ điển. Mỗi trạng thái được xác định BẤT NGỜ bởi status_name
của nó . Bên cạnh đó, chúng tôi sẽ lưu trữ các cờ biểu thị nếu trạng thái đó, khi được sử dụng, ngụ ý rằng cài đặt is_broken
, is_inactive
, is_maintenance
hoặc is_active
. Mỗi lần chỉ nên đặt một trong các cờ này.
Chúng tôi đã chỉ định một trạng thái hiện tại cho quá trình cài đặt. Nếu định theo dõi những gì đang xảy ra với thiết bị, chúng tôi cũng cần lưu trữ lịch sử của thiết bị. Để làm điều đó, chúng tôi sẽ sử dụng một bảng nữa, installation_status_history
. Đối với mỗi bản ghi ở đây, chúng tôi sẽ lưu trữ các tham chiếu đến cài đặt và trạng thái liên quan tại thời điểm này (ts_inserted
) khi trạng thái đó được chỉ định.
Cài đặt là một phần của khu phức hợp của chúng tôi. Mặc dù mỗi cài đặt là một thực thể duy nhất, nó vẫn có thể liên quan đến các cài đặt khác. (Ví dụ:hệ thống video ở lối vào trước của trung tâm mua sắm rõ ràng là có liên quan đến cửa trước của trung tâm mua sắm - mọi người sẽ được nhìn thấy bằng camera trước tiên và sau đó cửa sẽ mở.) Nếu chúng tôi muốn theo dõi các mối quan hệ này, chúng tôi sẽ lưu trữ chúng trong related_installation
bàn. Xin lưu ý rằng bảng này chỉ chứa các cặp DUY NHẤT gồm hai khóa, cả hai đều tham chiếu đến installation
bàn.
Logic tương tự được sử dụng để lưu trữ các thiết bị. Thiết bị là các phần cứng đơn lẻ tạo ra các tín hiệu mà chúng tôi quan tâm. Mặc dù các cài đặt thuộc về phức hợp nhưng các thiết bị thuộc về cài đặt. Đối với mỗi device
, chúng tôi sẽ lưu trữ:
-
device_code
- Một cách DUY NHẤT để biểu thị từng thiết bị. -
device_name
- Tên cho thiết bị này. -
installation_id
- Tham chiếu đến cài đặt thiết bị này. -
current_status_id
- Tình trạng hiện tại của thiết bị. -
ts_inserted
- Dấu thời gian khi bản ghi này được chèn.
Các trạng thái được xử lý theo cùng một cách. Chúng tôi sẽ sử dụng device_status
bảng để lưu trữ danh sách tất cả các trạng thái thiết bị có thể có. Bảng này có cùng cấu trúc với installation_status
và các thuộc tính được sử dụng theo cách tương tự. Lý do có hai từ điển trạng thái riêng biệt là các thiết bị và các cài đặt của chúng có thể có các trạng thái khác nhau - ít nhất là về tên gọi.
Trạng thái hiện tại được lưu trữ trong device.current_status_id
thuộc tính và lịch sử trạng thái được lưu trữ trong device_status_history
bàn. Đối với mỗi bản ghi ở đây, chúng tôi sẽ lưu trữ các mối quan hệ với thiết bị và trạng thái cũng như thời điểm bản ghi này được đưa vào.
Bảng cuối cùng trong lĩnh vực chủ đề này là related_device
bàn. Mặc dù rõ ràng là tất cả các thiết bị trong cùng một cài đặt đều có liên quan chặt chẽ với nhau, nhưng tôi muốn có tùy chọn để liên kết bất kỳ hai thiết bị nào thuộc về cài đặt bất kỳ. Chúng tôi sẽ làm điều đó bằng cách lưu trữ hai ID thiết bị của họ trong bảng này.
Tín hiệu và Sự kiện
Bây giờ chúng tôi đã sẵn sàng cho trọng tâm của toàn bộ mô hình.
Thiết bị tạo ra tín hiệu. Tất cả dữ liệu tín hiệu được lưu trong signal
bàn. Đối với mỗi tín hiệu, chúng tôi sẽ lưu trữ:
-
device_id
- Tham chiếu đến thiết bị tạo ra tín hiệu đó. -
value
- Giá trị số của tín hiệu đó. -
description
- Giá trị dạng văn bản có thể chứa bất kỳ thông số bổ sung nào (ví dụ:loại tín hiệu, các giá trị, đơn vị đo lường được sử dụng) liên quan đến tín hiệu đơn lẻ đó. Dữ liệu này được lưu trữ ở định dạng giống JSON. -
ts
- Dấu thời gian khi tín hiệu này được đưa vào bảng.
Chúng tôi có thể mong đợi rằng bảng này sẽ có mức sử dụng cực kỳ lớn, với một số lượng lớn các lần chèn được thực hiện mỗi giây. Do đó, việc bảo trì cơ sở dữ liệu nên tập trung vào việc theo dõi kích thước của bảng này.
Điều cuối cùng tôi muốn làm là thêm các sự kiện vào mô hình dữ liệu của chúng tôi. Sự kiện có thể được tạo tự động bằng tín hiệu hoặc được chèn thủ công. Một sự kiện được tạo tự động có thể là “cửa mở trong 5 phút”, trong khi sự kiện được chèn thủ công có thể là “thiết bị phải được tắt vì tín hiệu này”. Toàn bộ ý tưởng là lưu trữ các hành động xảy ra do hành vi của thiết bị. Sau đó, chúng tôi có thể sử dụng các sự kiện này trong khi thực hiện phân tích hành vi của thiết bị.
Các sự kiện sẽ được chi tiết hóa bằng event_type
. Mỗi loại được định nghĩa BẤT NGỜ bởi type_name
của nó .
Tất cả các sự kiện được tạo tự động hoặc được chèn thủ công đều được ghi lại trong event
bàn. Đối với mỗi bản ghi ở đây, chúng tôi sẽ lưu trữ:
-
event_type_id
- Tham chiếu đến loại sự kiện liên quan. -
description
- Mô tả bằng văn bản về sự kiện đó. -
signal_id
- Tham chiếu đến tín hiệu đã gây ra sự kiện, nếu có. -
inserted_manually
- Một cờ cho biết bản ghi này có được chèn theo cách thủ công hay không. -
event_ts
vàts_inserted
–Timestamps khi sự kiện này thực sự xảy ra và khi một bản ghi về nó được chèn vào. Hai điều này có thể khác nhau, đặc biệt là khi các bản ghi sự kiện được chèn theo cách thủ công.
Bảng cuối cùng trong mô hình của chúng tôi là event_device
bàn. Bảng này được sử dụng để liên kết các sự kiện với tất cả các thiết bị có liên quan. Đối với mỗi bản ghi, chúng tôi sẽ lưu trữ cặp DUY NHẤT event_id
- device_id
và dấu thời gian khi bản ghi được chèn.
Bạn nghĩ gì về mô hình dữ liệu xử lý tín hiệu của chúng tôi?
Hôm nay, chúng tôi đã phân tích một mô hình dữ liệu đơn giản mà chúng tôi có thể sử dụng để theo dõi tín hiệu từ một nhóm thiết bị được lắp đặt ở các vị trí khác nhau. Bản thân mô hình phải đủ để lưu trữ mọi thứ chúng ta cần để theo dõi trạng thái và thực hiện phân tích. Tuy nhiên, rất nhiều cải tiến vẫn có thể thực hiện được. Chúng ta có thể thêm gì? Vui lòng cho chúng tôi biết trong phần bình luận bên dưới.