thắc mắc query vào database liên tục

Còn tùy thuộc vào query của bạn là gì (ở đây hiểu mặc định database bạn nói là SQL)
  • Query vào 1 table mà table này hay có update, thì dễ ăn lock exception
  • Query mà toàn join vs sub select rồi sum, groupby thì chậm cả con db
  • Query where cái column ếu có index thì cũng zip
Còn chung chung query sql interval được không thì có, mấy thằng grafana, hay tool cho data BI, vẫn có feature interval trực tiếp vào db, để statistic ra view client. Có feature thì chứng tỏ là vẫn có.

Còn tùy thuộc vào hệ thống của bạn nặng hay nhẹ, và cost để interval bạn có chấp nhận không.
Như thằng kafka connect, nó cũng interval kiểu ping/pong query để xác định event thôi, advance hơn thì như bác bên trên nói, có thể cấu hình đọc từ CDC, thì performance cao hơn.
 
Còn tùy thuộc vào query của bạn là gì (ở đây hiểu mặc định database bạn nói là SQL)
  • Query vào 1 table mà table này hay có update, thì dễ ăn lock exception
  • Query mà toàn join vs sub select rồi sum, groupby thì chậm cả con db
  • Query where cái column ếu có index thì cũng zip
Còn chung chung query sql interval được không thì có, mấy thằng grafana, hay tool cho data BI, vẫn có feature interval trực tiếp vào db, để statistic ra view client. Có feature thì chứng tỏ là vẫn có.

Còn tùy thuộc vào hệ thống của bạn nặng hay nhẹ, và cost để interval bạn có chấp nhận không.
Như thằng kafka connect, nó cũng interval kiểu ping/pong query để xác định event thôi, advance hơn thì như bác bên trên nói, có thể cấu hình đọc từ CDC, thì performance cao hơn.
Yep, thanks các thím nhiều. Mình nghĩ chỗ interval này ko vấn đề gì, vì mình chỉ query bản ghi mới theo timestamp xong đẩy lên Azure. Còn xử lý tiếp theo thì có job khác rồi :)

Sent from Xiaomi Pro via nextVOZ
 
chả sao đâu fen, đừng làm phức tạp. 10s 1 lần thì thấm gì với db hiện nay. Mà fen nên nói rõ hơn là câu query làm gì. Query 0.01% số row khác với query 10% số row.
 
đọc sơ qua thì thấy "vì mình chỉ query bản ghi mới theo timestamp", có vẻ fen đang muốn lấy N rows where age(some_date) > '10s', rồi tạo cron job mỗi 10s đúng k?
 
Cảm ơn bạn. Mình đồng ý dùng interval rồi. Vì database ko có event nên chắc có mỗi cách batch processing này

Sent from Xiaomi Pro via nextVOZ
Dùng trigger thì sao bạn? Tạo 1 cái bảng kiểu DataUpdateTable, rồi trigger khi có data thay đổi sẽ update timestamp hoặc 1 số sequence vào bảng đó, mình check bảng đó nếu có thay đổi mới query bảng data.
 
Nếu bạn muốn làm batch processing
  • 1. Thông thường không làm trên master DB vì không cần real time. Nếu chấp nhận cost nên làm trên slave.
  • 2. Không cần dùng Kafka Connect vì nó là real time processing, không cần thiết với batch processing
  • 3. Nếu bạn chỉ cần biết record mới hoặc được update, và bạn có access để thay đổi application code thì có thể set up tại application level, sau khi commit data thành công vào database thì gửi 1 event vào queue (kafka hay các thể loại MQ) đều được. Bạn viết thêm 1 consumer làm central transformation là được.
  • 4. Trên cloud thì SQL DB query thông thường không bị charge, hoặc chỉ bị charge egress cost nếu query từ 1 region khác với DB. Ngược lại, NoSQL hoặc các thể loại Real time processing DB charge trên query.

Nếu bạn muốn làm real time listener thì
  • Kafka Connect như 1 fen nói ở trên.
  • Airflow chỉ là workflow để run pipeline, còn để collect data thì vẫn phải lựa chọn operator. Và hiện tại thì chưa có operator cho Azure Data Dactory (hoặc mình chưa cập nhật kịp :p )
 
Nếu bạn muốn làm batch processing
  • 1. Thông thường không làm trên master DB vì không cần real time. Nếu chấp nhận cost nên làm trên slave.
  • 2. Không cần dùng Kafka Connect vì nó là real time processing, không cần thiết với batch processing
  • 3. Nếu bạn chỉ cần biết record mới hoặc được update, và bạn có access để thay đổi application code thì có thể set up tại application level, sau khi commit data thành công vào database thì gửi 1 event vào queue (kafka hay các thể loại MQ) đều được. Bạn viết thêm 1 consumer làm central transformation là được.
  • 4. Trên cloud thì SQL DB query thông thường không bị charge, hoặc chỉ bị charge egress cost nếu query từ 1 region khác với DB. Ngược lại, NoSQL hoặc các thể loại Real time processing DB charge trên query.

Nếu bạn muốn làm real time listener thì
  • Kafka Connect như 1 fen nói ở trên.
  • Airflow chỉ là workflow để run pipeline, còn để collect data thì vẫn phải lựa chọn operator. Và hiện tại thì chưa có operator cho Azure Data Dactory (hoặc mình chưa cập nhật kịp :p )
  • Thường batch processing chả ai query 10s/ lần cả. Toàn từ 5 minute trở lên thôi. Chả qua thím đó muốn real time, nhưng sợ query nhiều quá ảnh hưởng tới Production.
  • Né ngay các thể loại viết trigger lên table dùm. Thường người ta bắt event record toàn đọc vào log.
  • Về mấy tool workflow automation (ETL, ...) thì bất kỳ đều hỗ trợ extract data từ tất cả loại source. Thằng airflow thì support Batch, Python. Còn Azure Data Factory mình ko rõ, chắc nó có sẵn component để chèn SQL query.
 
Dùng trigger thì sao bạn? Tạo 1 cái bảng kiểu DataUpdateTable, rồi trigger khi có data thay đổi sẽ update timestamp hoặc 1 số sequence vào bảng đó, mình check bảng đó nếu có thay đổi mới query bảng data.
Mình nghĩ trigger thì phải sửa database và nếu mình biết/nhớ thì nếu trigger bị lỗi thì bản ghi đó sẽ không được insert vào database.

Sent from Xiaomi Pro via nextVOZ
 
Nếu bạn muốn làm batch processing
  • 1. Thông thường không làm trên master DB vì không cần real time. Nếu chấp nhận cost nên làm trên slave.
  • 2. Không cần dùng Kafka Connect vì nó là real time processing, không cần thiết với batch processing
  • 3. Nếu bạn chỉ cần biết record mới hoặc được update, và bạn có access để thay đổi application code thì có thể set up tại application level, sau khi commit data thành công vào database thì gửi 1 event vào queue (kafka hay các thể loại MQ) đều được. Bạn viết thêm 1 consumer làm central transformation là được.
  • 4. Trên cloud thì SQL DB query thông thường không bị charge, hoặc chỉ bị charge egress cost nếu query từ 1 region khác với DB. Ngược lại, NoSQL hoặc các thể loại Real time processing DB charge trên query.

Nếu bạn muốn làm real time listener thì
  • Kafka Connect như 1 fen nói ở trên.
  • Airflow chỉ là workflow để run pipeline, còn để collect data thì vẫn phải lựa chọn operator. Và hiện tại thì chưa có operator cho Azure Data Dactory (hoặc mình chưa cập nhật kịp :p )
Mình ko có code, chỉ có db và phải transform data sang một kiểu chung vì có nhiều nguồn dữ liệu

Sent from Xiaomi Pro via nextVOZ
 
Mình query vào database liên tục để lấy dữ liệu thì có vấn đề gì xảy ra nhỉ? Ví dụ mỗi 10s mình query một lần để lấy các bản ghi mới trong 10s đó.

Cái này mình nghĩ chỉ liên quan tới connection pool thôi, nhưng liêụ câu query có ảnh hưởng tới gì khác không thì không rõ. Rất mong bác nào biết chỉ mình.

Sent from Xiaomi Pro via nextVOZ
nên đặt querry một lần cho response trả về
 
Theo tôi hiểu thì chủ thớt có lẽ đang chạy 1 oltp dbms ở on-permise và olap dbms ở cloud; sau đó cứ 10s 1 lần thì muốn đẩy dữ liệu từ oltp -> olap.
Gì chứ 10s 1 lần với dbms hiện tại chỉ là muỗi. Nhưng tôi nghĩ 10s 1 lần là ko cần thiết cho batch processing. Phía on-permise thì ko sao, chứ ở phía cloud thì có thể có vấn đề nếu back-end dbms là loại chuyên dùng cho olap; vì đám olap dbms này đều được tối ưu để update rất nhiều records cùng 1 lúc. Nếu có nhiều nguồn thì nên có buffering ở phía cloud để batch updating.
 
này thì change data capture chứ còn gì nữa, đọc từ binlog đỡ phải query vào DB, lại k phải lo đi maintain logic 1 mớ application ở trên, em đang dùng Debezium. Mệt mỗi cái nếu ai chưa dựng kafka thì phải thêm 2 component cho nó (cả zookeeper nữa)
 
Sao vào thread này toàn suggest Kafka Connect, Debezium chi cho phức tạp mà nặng nề vậy :burn_joss_stick:. Có mỗi cái DB đã maintain phát mệt rồi, mấy thím còn thêm đủ thứ hoa lá vào, chỉ tội thằng dev vào sau :adore:
 
Theo tôi hiểu thì chủ thớt có lẽ đang chạy 1 oltp dbms ở on-permise và olap dbms ở cloud; sau đó cứ 10s 1 lần thì muốn đẩy dữ liệu từ oltp -> olap.
Gì chứ 10s 1 lần với dbms hiện tại chỉ là muỗi. Nhưng tôi nghĩ 10s 1 lần là ko cần thiết cho batch processing. Phía on-permise thì ko sao, chứ ở phía cloud thì có thể có vấn đề nếu back-end dbms là loại chuyên dùng cho olap; vì đám olap dbms này đều được tối ưu để update rất nhiều records cùng 1 lúc. Nếu có nhiều nguồn thì nên có buffering ở phía cloud để batch updating.
Yep, mình đang đề xuất 1 phút 1 lần

Sent from Xiaomi Pro via nextVOZ
 
Mình đang có cái yêu cầu sync up giữa On-premises vs cloud. Mà k/h thì có yêu cầu dữ liệu phải sync sớm lên cloud. Mình cũng hơi ngần ngại dùng interval nhưng ko có cách nào khác. Tìm tài liệu của MS thì không thấy. Đang ko rõ thời gian ngắn quá thì có ảnh hưởng gì tới database server không.

Sent from Xiaomi Pro via nextVOZ
Cực chẳng đã mới phải interval, nên tìm cách làm theo kiểu khi có dữ liệu mới thì lúc này mới trigger query. Còn nếu records mới được insert vào db thường xuyên thì interval lại tiết kiệm hơn
 
Sao vào thread này toàn suggest Kafka Connect, Debezium chi cho phức tạp mà nặng nề vậy :burn_joss_stick:. Có mỗi cái DB đã maintain phát mệt rồi, mấy thím còn thêm đủ thứ hoa lá vào, chỉ tội thằng dev vào sau :adore:

Debezium là để khỏi phải dev. Còn nếu thích code thì có thể dùng thẳng cái logical replication của DB (ý như cách mà Debezium làm) cũng được mà.

Sent from Xiaomi M2007J20CG using vozFApp
 
Back
Top