2010-01-07 39 views
8

Có một dịch vụ web cung cấp một số dữ liệu mà ứng dụng của tôi sử dụng. Dữ liệu này là khá lớn và chỉ thay đổi rất hiếm khi tôi nghĩ rằng nó sẽ là tốt đẹp nếu ứng dụng có thể lưu nó vào thẻ SD và chỉ cập nhật nó khi cần thiết.Đề xuất cho việc lưu trữ dữ liệu trên Android?

Hiện tại tôi đang lấy dữ liệu (một tệp XML) và phân tích cú pháp nó thành một cây đối tượng bằng SAX. Quá trình này mất (tối đa) 2-3 giây qua WIFI của tôi. Tuy nhiên, việc tuần tự hóa các đối tượng kết quả với SDCard mất nhiều thời gian hơn đáng kể (một phút hoặc hơn) và deserializing nó vẫn mất nhiều thời gian hơn là chỉ tải xuống/phân tích cú pháp ngay từ đầu.

Có ai có bất kỳ đề xuất nào để cải thiện ý tưởng này hoặc thay thế cho việc lưu giữ dữ liệu này (không phải chỉ lưu tệp XML và reparsing mỗi lần)?

CẬP NHẬT: Đây không chỉ là một bộ sưu tập nhỏ. Đồ thị đối tượng thực sự phức tạp và lưu trữ nó thành một cơ sở dữ liệu sẽ dẫn đến hàng chục bảng chỉ với một bản ghi duy nhất trong mỗi bảng.

Trả lời

10

Tuần tự hóa Android là nổi tiếng là chậm. Tôi khuyên bạn nên chuyển sang sử dụng XML hoặc JSON (hoặc bất kỳ thứ gì) và ghi tệp ra theo cách đó. Vì bạn đã có một trình phân tích cú pháp XML, nó có thể có ý nghĩa nhất là lưu vào bộ nhớ cache tệp XML gốc mà bạn đã tải xuống và loại bỏ nó khi cần thiết.

Tôi đã chuyển từ lưu trữ tệp Serializable thành JSON trong ứng dụng trước đó và tăng tốc là không thể tin được, ít nhất một thứ tự độ lớn.

(Tôi có thể hiểu sai câu hỏi của bạn - Tôi cho rằng bạn đang sử dụng Serializable để ghi vào đĩa. Nếu bạn đang tạo lại XML, thì tôi không chắc tại sao nó lại chậm hơn nhiều trên thẻ SD. Tôi đồng ý rằng cơ sở dữ liệu SQLite có ý nghĩa nhất, nhưng như bạn đã tuyên bố nó không phù hợp với nhu cầu của ứng dụng của bạn.)

+0

Tôi đã nghiêm túc xem xét việc lưu trữ tệp XML trực tiếp từ máy chủ (và có thể sẽ) ... nó dường như giống như việc deserializing các đối tượng bất cứ khi nào dữ liệu là cần thiết "nên" nhanh hơn reparsing một tệp XML. –

+0

Tuần tự hóa đối tượng hoạt động vì nó rất chung chung và mã chung có thể chạy rất chậm. Ngoài ra, dung lượng lưu trữ lớn hơn rất nhiều; Tôi nghĩ rằng tôi giảm kích thước tập tin từ 10 + kilobyte với serialization xuống dưới một kilobyte (mà không tính gzipping JSON của tôi). –

-2

Tại sao bạn không sử dụng cơ sở dữ liệu? Xem Android Data Storage Guide

+0

Một DB chỉ không có ý nghĩa cho ứng dụng này ... Tôi muốn, nhưng nó chỉ là công nghệ sai. –

+0

thats những gì họ nói về cơ sở dữ liệu hướng web 10 năm trước –

+0

Cảm ơn bạn đã condescension ... nó rất hữu ích. –

0

Tôi vừa mới viết một ứng dụng Android cho tuần trước về cơ bản thực hiện việc này. Nó lấy một số tệp XML (lớn) trực tuyến, và sau đó hiển thị một phần dữ liệu trong các khung nhìn khác nhau.

Chúng tôi thực hiện việc đó bằng cách tìm nạp và phân tích cú pháp XML bằng SAX và (trong khi phân tích cú pháp) ghi tất cả vào cơ sở dữ liệu SQLite. Và sau đó chúng tôi chỉ truy vấn cơ sở dữ liệu mỗi lần chúng tôi cần hiển thị một số chế độ xem của tập dữ liệu.

Hoạt động như một nét duyên dáng và đủ nhanh để hiển thị nhiều dữ liệu trên lớp phủ bản đồ google, nơi chúng tôi đang truy vấn cơ sở dữ liệu trên mọi cuộc gọi đến phương thức vẽ của lớp phủ bản đồ của chúng tôi.

Vì vậy, tôi chắc chắn sẽ đề xuất đi cho một SQLite database, nếu dữ liệu trong tài liệu XML dễ dàng được trình bày trong cơ sở dữ liệu.

3

Ngoài ra, trừ khi dữ liệu của bạn ít nhất 100 Kb, tôi khuyên bạn nên lưu trữ nó trong kho dữ liệu cá nhân của bạn thay vì trên thẻ SD. Hãy nhớ rằng bạn không thể dựa vào thẻ SD có sẵn.

0

Nếu dịch vụ web có thể cung cấp cho bạn một số kết quả được chỉ định (ví dụ: requestData giữa chỉ mục 1 và 10 hoặc cho tôi 25 kết quả đầu tiên) hãy thử sử dụng (đặt nút "Tải thêm kết quả" đơn giản hoặc triển khai một cơ chế tự động tải). Nếu dịch vụ web không cung cấp tính năng này thì hãy thử lưu xml của bạn lên sdcard và khi bạn cần dữ liệu, hãy thử phân tích cú pháp chỉ một số kết quả được chỉ định. Hy vọng điều này giúp đỡ!

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