2013-05-21 33 views
6

nềnEntityPersister & Collection cập nhật

Entity Persister Astyanax của Astyanax vì đã cứu một bản đồ của một thực thể trong nhiều cột. Định dạng là mapVariable.key

Vấn đề:

Entity Persister của astyanax không loại bỏ cặp khóa/giá trị sẽ bị xóa khỏi cassandra khi một bản đồ trong một thực thể đã được cập nhật

Giải pháp tôi đang sử dụng hiện nay (cách tiếp cận xấu)

tôi đang xóa toàn bộ hàng, và sau đó lắp lại nó

Một số thông tin khác

Tôi vẫn tồn tại đối tượng java trong cassandra sử dụng Entity Persister của astyanax (com.netflix.astyanax.entitystore).

Điều tôi nhận thấy là khi Bản đồ thực thể được duy trì, ví dụ: 2 testkey: testvalue & testkey2: testvalue2 và lần tiếp theo Bản đồ của cùng một đối tượng được duy trì với một giá trị (một khóa/giá trị cặp đã bị xóa): testkey: testvalue, testkey2: testvalue2 không bị xóa khỏi họ cột.

Vì vậy, với tư cách là công việc, tôi cần xóa toàn bộ hàng và sau đó lắp lại.

mã chèn của tôi:

 final EntityManager<T, String> entityManager = new DefaultEntityManager.Builder<T, String>() 
      .withEntityType(clazz) 
      .withKeyspace(getKeyspace()) 
      .withColumnFamily(columnFamily) 
      .build(); 
    entityManager.put(entity); 

tôi thiếu gì? Điều này thực sự không hiệu quả và tôi nghĩ rằng persiffax của thực thể persister là nghĩa vụ phải chăm sóc này một mình.

Mọi suy nghĩ?

Trả lời

2

Bạn không thiếu gì cả.

Điều gì xảy ra như sau: 1. Astyanax tạo danh sách ColumnMappers một cho mỗi trường của thực thể theo tuần tự hóa. 2. Sau đó, ColumnMappers thay phiên nhau điền hàng loạt đột biến. 3. Đối với bản đồ, MapColumnMapper được sử dụng. Nếu bạn nhìn vào mã của nó, bạn sẽ thấy rằng nó chỉ thêm cặp khóa: giá trị vào lô đột biến. 4. Khi dữ liệu được đặt trong một hàng trong cassandra, các cột mới từ lô được thêm vào, các cột hiện có sẽ bị ghi đè, những dữ liệu cũ không may là giống nhau.

Một giải pháp ở đây sẽ là viết bộ nối tiếp tùy chỉnh cho bản đồ của bạn và lưu nó vào một trường.

1

Hãy xem https://github.com/deanhiller/playorm trình ánh xạ orm của nó cho cassandra, hbase và một vài cơ sở dữ liệu nosql khác. Nó xóa các mục khỏi bộ sưu tập khi lưu. Đó cũng là cách dễ dàng hơn để sử dụng sau đó astyanax.

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