- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试使用 持久化对象时遇到问题多线程 .
详情:
假设我有一个对象 PaymentOrder
其中有一个列表 PaymentGroup
(一对多关系)和 PaymentGroup
Bao gồm CreditTransfer
的列表(再次一对多关系)。
自人数CreditTransfer
很大(以十万计),我根据 PaymentGroup
对其进行了分组(基于一些业务逻辑)
并创建 WORKER 线程(每个 PaymentGroup 一个线程)以形成 PaymentOrder
对象并提交到数据库中。
问题是,每个工作线程都在创建一个 PaymentOrder
(其中包含一组唯一的 PaymentGroup
s)。
所有实体的主键都是自动生成的。
所以一共有三个表,1.PAYMENT_ORDER_MASTER,2.PAYMENT_GROUPS,3.CREDIT_TRANSFERS,都是一对多的映射关系。
因此,当第二个线程尝试将其组持久化到数据库中时,框架会尝试将相同的 PaymentOrder
持久化。 ,前一个线程提交的,由于其他一些唯一字段约束(PaymentOrder
的校验和),事务失败。
理想情况下它必须是 1..n..m ( PaymentOrder
->PaymentGroup -->
CreditTransfer`)
我需要实现的是如果没有 PaymentOrder
的条目在数据库中创建一个条目,如果它在那里,不要在 PAYMENT_ORDER_MASTER
中创建条目,但仅限于 PAYMENT_GROUPS
Và CREDIT_TRANSFERS
.
我怎样才能解决这个问题,维护 split-master-payment-order-using-groups 逻辑和多个线程?
1 Câu trả lời
你有选择。
1)原始但简单,在最后捕获关键违规错误并在没有 parent 的情况下重试插入。假设你的 parent 真的是独一无二的,你知道另一个线程只是让 parent ......继续与 children 相处。与其他选项相比,这可能表现不佳,但也许您会获得所需的流行音乐。如果您有一个 child 的 parent 比例很高,那效果会很好。
2)改变你的阅读一致性级别。它是特定于供应商的,但您有时可以读取未提交的事务。这将帮助您在提交之前查看其他线程的工作。这不是万无一失的,你仍然必须做 #1,因为另一个线程可以在阅读后潜入。但它可能会提高您的吞吐量,但代价是更加复杂。可能是不可能的,基于 RDBMS(或者它可能发生但仅在数据库级别,搞乱其他应用程序!)
3) 使用单线程消费者实现工作队列。如果程序的主要昂贵工作在持久性级别之前,您可以让您的线程将它们的数据“插入”到工作队列中,在那里不强制执行 key 。然后从工作队列中拉出一个线程并坚持下去。工作队列可以在内存中、另一个表中或供应商特定的位置(Weblogic 队列、Oracle AQ 等)。如果程序的主要工作是在持久化之前,您可以并行化它并返回到插入的单个线程。您甚至可以让您的消费者在“批量插入”模式下工作。亲爱的。
4)放宽你的限制。如果同一个 child 有两个 parent 持有相同的信息,谁在乎呢?我只是问问。如果您以后不需要父信息的超快速更新,并且您可以更改您的阅读程序以理解它,它可以很好地工作。它不会让你在 DB 设计类(class)中获得“A”,但如果它有效......
5) 实现一个愚蠢的锁表。我讨厌这个解决方案,但它确实有效——让你的线程写下它正在处理父“x”,而其他人无法做到,因为它是第一个事务(和提交)。通常会导致相同的问题(以及其他问题 - 稍后清理记录等),但可以在子插入缓慢且单行插入快速时起作用。你仍然会有碰撞,但会更少。
关于java - 使用多线程的 JPA 持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514117/
Tôi đã tìm kiếm trực tuyến nhưng không tìm thấy bài viết phù hợp nào giải thích cách sử dụng dịch vụ WCF bằng javascript, đặc biệt là WebScriptEndpoint. Có ai có thể hướng dẫn về vấn đề này không? Cảm ơn câu trả lời hay nhất. Đây là bài viết về
Tôi đang viết một chương trình C sẽ chạy các lệnh Linux, ví dụ: cat /etc/passwd | grep list | cut -c 1-5 Tôi không nhận được kết quả nào *ở đây cha đợi con đầu tiên (chi
Vì vậy, tôi đang cố gắng xử lý việc tải tệp lên và sau đó lưu trữ tệp đó vào cơ sở dữ liệu dưới dạng tệp nhị phân. Sau khi lưu trữ, tôi cố gắng phục vụ tệp theo URL đã cho. Có vẻ như tôi không thể tìm ra phương pháp nào hiệu quả ở đây. Tôi cần sử dụng cơ sở dữ liệu vì tôi sử dụng Google Apps
Tôi đang cố gắng tạo một macro thêm công thức bên dưới vào một ô rồi kéo công thức đó xuống toàn bộ cột và sao chép công thức đó vào cột H. Tôi muốn nhập dữ liệu vào cột F và H cho công thức: Range("F1").formula = "=IF(ISE
Vấn đề này tương tự như vấn đề này, nhưng tôi muốn sử dụng OperatorPrecedenceParser để phân tích cú pháp một biểu thức với ứng dụng hàm trong FParsec. Đây là AST của tôi: type Expression =
Tôi muốn thay đổi truy vấn này thành mã bằng cách sử dụng sequelize và node.js tùy thuộc vào nơi select COUNT(gender) as genderCount from customers where
Tôi đang sử dụng GNU bash, phiên bản 5.0.3(1)-release (x86_64-pc-linux-gnu), và tôi tự hỏi tại sao tôi lại gặp lỗi cú pháp cho một câu lệnh gán đơn giản: #/bin/bash var1=/tmp
Sau đây là lý do tại sao mã của tôi không hoạt động trong IE. Mã của tôi hoạt động tốt trên mọi trình duyệt. Không có gì. Nhưng khi tôi chạy dự án của mình trên IE, nó lại phát hiện lỗi. Và lớp jquery và insertadjacentHTMl của tôi không hoạt động
Tôi đang cố gắng thay đổi innerHTML của một thẻ. Tôi không có quyền truy cập vào biểu mẫu nên không thể chỉnh sửa HTML. Mã định danh duy nhất của thẻ là thuộc tính "for". Sau đây là cấu trúc của đầu vào và nhãn:
Tôi có một trang nơi tôi trả về bài đăng của người dùng, có thể bình luận tức thời vào các bài đăng đó bằng một số mã jquery và sau khi có bình luận mới, tôi chèn bình luận mới vào bên dưới bài đăng cùng với nút xóa. Vấn đề là nút Xóa không hoạt động trên phần tử mới được chèn vào,
Tôi có một tệp "phân cách bằng dấu gạch ngang" với khoảng 20 cột. Tôi chỉ muốn băm cột đầu tiên là một số như số tài khoản bằng cách sử dụng sha1sum và trả về phần còn lại của các cột theo nguyên trạng. Cách tốt nhất để thực hiện việc này bằng awk hoặc sed là gì? Tài khoản
Tôi cần chèn nội dung sau vào bảng của mình... Bảng người dùng của tôi có năm cột id, tên người dùng, mật khẩu, tên, mục nhập. (Tôi chưa gửi bất cứ thứ gì vào mục nhập, tôi sẽ làm sau bằng php) nhưng vì lý do nào đó tôi cứ nhận được lỗi này: #1054 - U
Vì vậy, tôi đang cố gắng tạo một trường nhập liệu mà tôi có thể nhập bất kỳ ký tự nào vào đó, sau đó viết thường giá trị đã nhập, xóa mọi ký tự không phải chữ và số, chỉ để lại dấu "." thay cho dấu cách. Ví dụ, nếu tôi nhập: 70% Trái Đất là nước, -!*#$^^ & 30% đất
Tôi đang cố gắng làm một điều mà tôi nghĩ là khá đơn giản nhưng vì lý do nào đó tôi lại không nhận được kết quả như mong muốn? Tôi mới làm quen với javascript nhưng đã có kinh nghiệm với java nên chắc chắn là tôi không sử dụng quy tắc chính xác nào cả. Đây là phương pháp để lấy giá trị đầu vào, kiểm tra lựa chọn
Tôi đang cố gắng tải dữ liệu từ cơ sở dữ liệu mysql bằng angularjs. Ứng dụng hoạt động theo cách này: người dùng đăng nhập và tên người dùng của họ được lưu trữ trong cookie. Tên người dùng này được hiển thị trên trang chủ Tôi muốn lấy giá trị này và truyền nó qua angularjs
Tôi đang sử dụng autoLayout và muốn đặt UIlabel vào UITableViewCell và nó phải luôn nằm ở bên phải và ở giữa ô. Đây là những gì tôi muốn đạt được vì vậy ở đây bạn có thể thấy những gì tôi đang nói đến
Tôi cần truy vấn elasticsearch tương đương với MySql. Truy vấn sql của tôi: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
Tôi đang triển khai mã để làm việc với JSON. func setup() { nếu let flickrURL = NSURL(string: "https://api.flickr.com/
Tôi đã thử sử dụng vòng lặp for để khai báo các biến và sau đó kiểm tra xem cols và rols có giống nhau không. Nếu đúng như vậy, nó sẽ chạy hàm đệ quy. Tuy nhiên, tôi đang gặp sự cố khi thực hiện lệnh do trong javascript. Có ai có thể giúp được không? Bây giờ, khi so sánh cột 1 và
Tôi đã đưa ra một ví dụ ngắn về một vấn đề mà tôi đang giải quyết. Mã HTML: 1 2 3 Mã CSS: .BB a:hover{ color: #000; } .BB > li:after {
Tôi là một lập trình viên xuất sắc, rất giỏi!