Avatar
0
e2al3qakmdd1okym Beginner
Một cách tối ưu để thực hiện delta-load trong ETL
Em đang tìm hiểu về delta-load trong ETL, em đang có 1 mô hình producer-consumer. <ul> <li>Consumer sẽ thực hiện logic trên tất cả dữ liệu được publish bởi producer</li> <li>Producer sẽ thực hiện incremetal write cho tập dữ liệu nhận được. Vấn đề là producer sẽ đóng vai trò như 1 framework và tự động đánh giá nội dung để cho rằng 1 Object có bị thay đổi hay không.</li></ul> <p> Em muốn hỏi là coó 1 cách tối ưu nhất để Producer tự extract những Object bị modified không? </p> <ul> <li>Giải pháp hiện tại của em là serialize Object sang byte và thực hiện hash trên byte array đó (giống như commit hash) để lưu trữ state Object đó, tuy nhiên em đang không biết 1 hàm hash hiệu quả cho việc này, xin nhờ mọi người giúp.</li></ul>
Answer
Avatar
0
Dev Mới Beginner
Dev Mới Beginner
Không hiểu kiểu gì luôn?
Hi anh Dũng, cả nhà mình,<p> Em đang gặp vấn đề như sau: </p> <p> Lưu 1 object xuống db, sau đó dùng id của object đó push vào kafka, đoạn code mô tả bên dưới: </p> <p> var saveResult = this.repo.saveAndFlush(entity); </p> <p> this.kafkaTemplate.send(topic, saveResult.getId()); </p> <p> Tuy nhiên khi listen topic trên thì thi thoảng vẫn có những trường hợp em gọi hàm findById bị not found. </p> <p> Vậy có phải là việc listen topic trên diễn ra trước lúc transaction được commit ko nhỉ? Và cũng xin mọi người cách để giải quyết bài trên ạ </p> <p> (Em đang dùng spring boot cả nhà ạ) </p>
Answer
Avatar
0
e2al3qakmdd1okym Beginner
Kryo serializer
Em mới tiếp cận việc dùng Kryo cho serializer Object to byte.<p> Theo em biết thì Kryo cho phép config <code class="markdown-inline">setRegistrationRequired()</code> </p> <em>Nếu set <code class="markdown-inline">true</code>, khi dùng writeClassAndObject() Kryo sẽ thêm registrationId vào đầu bytes array để làm header</em> <em>Nếu <code class="markdown-inline">false</code>, Kryo sẽ tự thêm metadata của class đó.</em> <p> Lấy ví dụ em có class TypeA có 1 field <code class="markdown-inline">List&lt;String&gt;</code>. </p> <p> Vấn đề nếu set true cho <code class="markdown-inline">setRegistrationRequired()</code> thì khi writeClassAndObject Kryo sẽ dùng runtime type để chọn Serializer phù hợp cho <code class="markdown-inline">List&lt;String&gt;</code> (có thể là ArrayList, LinkedList, ...) và giả sử việc <code class="markdown-inline">register</code> các Class phải thực hiện trước khi Kryo write. </p> <p> Trong trường hợp này em sẽ phải register như thế nào nếu có 1 field là Interface (vì không thể register toàn bộ concrete Class của 1 Interface được). Có cách nào để xứ lí không nhỉ? </p>
Answer
Avatar
0
azqhdyt4pggs7smw Beginner
EzyRepository annotation could not instantiate repo class.
I added ezydata-jpa to my EzyFox Server and followed EzyChat 003: Connect to database tutorial on your youtube channel. The only difference is that I automated the config process with ezyfox-boot-autoconfigure. However this exception poped <div class="markdown-block position-relative overflow-auto source-java"> <pre> bean (xxxRepository, xxxRepository) implementation not found, uncompleted classes: [class com.xxx.service.xxxServiceImpl] </pre> </div>when I try to EzyAutoBind repository to a Service Singleton class <p> I'm using MySql by the way </p>
Answer
Avatar
0
Tien Sy Beginner
Tien Sy Beginner
Queue In Java Spring Boot
Hiện tại em đang muốn tạo queue trong java (chỉ dành riêng cho service java), nhằm mục đích để chứa các request và xử lý lần lượt. Em đang phân vân không biết nên sử dụng một số queue của java như LinkedList, ... hay sử dụng message broker như rabbit mq, kafka, ... Mong mọi người hỗ trợ giúp em ạ
Answer
Avatar
0
Thành Lê Văn Teacher
Sự khác biệt giữa Message Và Event là gì?
Xin chào mọi người. Mọi người cho em hỏi sự khác biệt giữa Message và Event là gì ạ?<p> Khi nào mình sẽ dùng Message và khi nào dùng Event ạ ? </p>
Answer
Avatar
0
Phạm Quang Beginner
Phạm Quang Beginner
Mapping data JSON
em gặp 1 bài toán yêu cầu lấy dữ liệu từ URL rồi hiển thị output ra như trên, chỉ lấy trường cha, trường con và type<p> input: </p> <p> "name": { </p> <p> "key": "name", </p> <p> "type": "string-object", </p> <p> "type_view": "text", </p> <p> "field_default": 1, </p> <p> "count": 184259, </p> <p> "type_al": "string" </p> <p> }, </p> <p> OUTPUT: "name"{"type":"string-object"} </p> <p> input: </p> <p> "emails": { </p> <p> "key": "emails", </p> <p> "type": "array-object", </p> <p> "type_view": "emails", </p> <p> "list_field": { </p> <p> "value": { </p> <p> "key": "value", </p> <p> "type": "string", </p> <p> "type_view": "string", </p> <p> "type_al": "string" </p> <p> }, </p> <p> "tags": { </p> <p> "key": "tags", </p> <p> "type": "array-object", </p> <p> "type_view": "chon-nhieu", </p> <p> "type_al": "string" </p> <p> }, </p> <p> "hash": { </p> <p> "key": "hash", </p> <p> "type": "string", </p> <p> "type_view": "string", </p> <p> "type_al": "string" </p> <p> }, </p> <p> "encrypt": { </p> <p> "key": "encrypt", </p> <p> "type": "string", </p> <p> "type_view": "string", </p> <p> "type_al": "string" </p> <p> }, </p> <p> "encrypt_vccorp": { </p> <p> "key": "encrypt_vccorp", </p> <p> "type": "string", </p> <p> "type_view": "string", </p> <p> "type_al": "string" </p> <p> }, </p> <p> OUTPUT: </p> <p> "emails": { </p> <p> "list_field": { </p> <p> field1_String_1 </p> <p> filed2_array-object </p> <p> field3_string_2 </p> <p> field4_string_3 </p> <p> field_string_4 </p> <p> }, </p>
Answer
Avatar
1
Shi Shi Beginner
Shi Shi Beginner
Call chéo db microservices
xin chào mọi người, mọi người có thể giải thích giúp em tại sao không lên call chéo db trong microservice không ạ. Em cảm ơn.
Answer
Avatar
1
Shi Shi Beginner
Shi Shi Beginner
giải quyết bài toán file lớn
xin chào mọi người, <ol start="1"> <li>em muốn hỏi là thường các big tech khi có bài toán download file dung lượng lớn bị timeout họ sẽ giải quyết theo kiểu nào ạ.</li> <li>một câu hỏi nữa em muốn hỏi là khi lượng request nhiều cùng call vào api xuất file lớn đó thì giải pháp thường dùng nhất của họ tránh chết hệ thống là gì, mọi người có thể giải thích chi tiết một chút giúp em được không ạ, em cảm ơn.</li></ol>
Answer
Avatar
1
datconxanh Beginner
datconxanh Beginner
hỏi về native query
Mọi người cho em hỏi hiện tại em muốn thêm OPTION(RECOMPILE) vào cuối câu native query nhưng mà do đang dùng jpa nên cái pagination nó tự add offset vào cuối thành ra cái OPTION(RECOMPILE) lại đứng trước offset :( Em xin hướng giải quyết ạ
Answer
Avatar
1
Shi Shi Beginner
Shi Shi Beginner
jwt in java
em chào mọi người, mọi người cho e hỏi e dùng thuật ES256 để gen token <p> nhưng khi có token để verify ví dụ như này </p> <p> public key : <div class="markdown-block position-relative overflow-auto source-"> <pre> MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE02Ar8685UapqDlOT8TneixaeR2Uu0tRu0R8WTG5ATA7j3Nk9x6poNYiH/Ez6jhwQg/ocioHsjzOOStUeSN8aIg== </pre> </div>và token : </p> <div class="markdown-block position-relative overflow-auto source-"> <pre> eyJhbGciOiJFUzI1NiJ9.eyJzdWIiOiJ0ZXN0LW5vYyIsImF1dGgiOiJCSV9FWFBPUlQiLCJlbWFpbCI6ImFiYy5jb20udm4iLCJmdWxsX25hbWUiOiJCVSBOT0MiLCJST0xFX0pXVCI6IkJJX0VYUE9SVCIsIk1OVl9KV1QiOiJ0ZXN0LW5vY19ub2MiLCJleHAiOjk5OTk5OTk5OTk5OTk5fQ.xdtY5Rbay7I5733gBOzSoPFrADCwqE7PhuNGd0zdkyB81wbGunFny2CjagQfgVr_kg0RviUmusjGmjiVk3zB_Q </pre> </div><p> thì khi verify tại sao e thêm 1 ký tự bất kỳ vào cuối token nó vẫn verify thành công ạ, nhưng thêm đến ký tự thứ 2 vào cuối hoặc chỉ thêm ký tự . vào cuối thì verify thất bại, nếu theo nguyên tắc e làm sai khác token đi so với bán đầu nó phải verify thất bại luôn chứ ạ, mong mọi người giải đáp giúp e, e cảm ơn. </p> <div class="markdown-block position-relative overflow-auto"> <pre> <span class="pl-k">public</span> <span class="pl-k">class</span> GenToken { <span class="pl-k">public</span> <span class="pl-k">static</span> <span class="pl-k">void</span> main(String[] args) <span class="pl-k">throws</span> Exception { KeyPair keyPair = generateECKeyPair(); String publicKeyBase64 = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); String privateKeyBase64 = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded()); String jwtToken = createJwtToken(publicKeyBase64, privateKeyBase64); } <span class="pl-k">private</span> <span class="pl-k">static</span> KeyPair generateECKeyPair() <span class="pl-k">throws</span> NoSuchAlgorithmException, InvalidAlgorithmParameterException { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(<span class="pl-s">"EC"</span>); ECGenParameterSpec ecGenParameterSpec = <span class="pl-k">new</span> ECGenParameterSpec(<span class="pl-s">"secp256r1"</span>); keyPairGenerator.initialize(ecGenParameterSpec); <span class="pl-k">return</span> keyPairGenerator.generateKeyPair(); } <span class="pl-k">private</span> <span class="pl-k">static</span> String createJwtToken(String publicKeyBase64, String privateKeyBase64) { Date expirationDate = <span class="pl-k">new</span> Date(99999999999999999L); <span class="pl-k">return</span> Jwts.builder() .setSubject(<span class="pl-s">"test-noc"</span>) .claim(<span class="pl-s">"auth"</span>, <span class="pl-s">"EXPORT"</span>) .claim(<span class="pl-s">"email"</span>, <span class="pl-s">"abc.com.vn"</span>) .claim(<span class="pl-s">"full_name"</span>, <span class="pl-s">"BU"</span>) .claim(<span class="pl-s">"ROLE_JWT"</span>, <span class="pl-s">"EXPORT"</span>) .claim(<span class="pl-s">"MNV_JWT"</span>, <span class="pl-s">"test-manv"</span>) .setExpiration(expirationDate) .signWith( SignatureAlgorithm.ES256, getPrivateKey(privateKeyBase64) ) .compact(); } <span class="pl-k">private</span> <span class="pl-k">static</span> PrivateKey getPrivateKey(String privateKeyBase64) { <span class="pl-k">try</span> { byte[] keyBytes = Base64.getDecoder().decode(privateKeyBase64); KeyFactory keyFactory = KeyFactory.getInstance(<span class="pl-s">"EC"</span>); <span class="pl-k">return</span> keyFactory.generatePrivate(new PKCS8EncodedKeySpec(keyBytes)); } <span class="pl-k">catch</span> (Exception e) { <span class="pl-k">throw</span> <span class="pl-k">new</span> RuntimeException("Error loading <span class="pl-k">private</span> key", e); } } </pre> </div><p> còn đây là class verify token của e </p> <div class="markdown-block position-relative overflow-auto"> <pre> <span class="pl-k">public</span> <span class="pl-k">class</span> JwtProcess { SignatureAlgorithm algorithm; <span class="pl-k">private</span> PublicKey getPublicKey(String publicKeyBase64) <span class="pl-k">throws</span> Exception { algorithm = SignatureAlgorithm.ES256; byte[] decoded = Base64.getDecoder().decode(publicKeyBase64); X509EncodedKeySpec spec = <span class="pl-k">new</span> X509EncodedKeySpec(decoded); KeyFactory kf = KeyFactory.getInstance(algorithm.isRsa() ? <span class="pl-s">"RSA"</span> : <span class="pl-s">"EC"</span>); <span class="pl-k">return</span> kf.generatePublic(spec); } <span class="pl-k">public</span> <span class="pl-k">boolean</span> verifyToken(String token, String publicKeyBase64) { <span class="pl-k">try</span> { PublicKey publicKey = getPublicKey(publicKeyBase64); Jwts.parserBuilder().setSigningKey(publicKey).build().parseClaimsJws(token); <span class="pl-k">return</span> true; } <span class="pl-k">catch</span> (Exception e) { e.printStackTrace(); <span class="pl-k">throw</span> <span class="pl-k">new</span> ObjectException(<span class="pl-s">"</span> Could <span class="pl-k">not</span> verify JWT token integrity! <span class="pl-s">"</span>); } } <span class="pl-k">public</span> JwtClaims decodeToken(String token, String publicKey) <span class="pl-k">throws</span> Exception { Claims claims = Jwts.parser() .setSigningKey(getPublicKey(publicKey)) .parseClaimsJws(String.valueOf(token)).getBody(); <span class="pl-k">return</span> <span class="pl-k">new</span> JwtClaims( claims.getSubject(), claims.get(<span class="pl-s">"auth"</span>).toString(), claims.get(<span class="pl-s">"email"</span>).toString(), claims.get(<span class="pl-s">"full_name"</span>).toString(), claims.get(<span class="pl-s">"ROLE_JWT"</span>).toString(), claims.get(<span class="pl-s">"MNV_JWT"</span>).toString(), claims.get(<span class="pl-s">"exp"</span>).toString() ); } } </pre> </div>
Answer
Avatar
0
Khoi Nguyen Beginner
Khoi Nguyen Beginner
Thiết kế base Authenticate and Authorization
Em muốn thiết kế 1 base Authenticate and Authorization để dùng lại cho các project ạ. Mọi người đóng góp cho em về ERD của em với ạ. Em cảm ơn. <img src="/api/v1/media/06699a9d2eef4742423e778fa350d0a1abf91a2a3097f4f3758df998656e999b.png" alt="ERD.png">
Answer