2012-01-10 40 views
9

Tôi đang nhập ~ 18.000 bản ghi các thực thể khác nhau có liên quan với nhau từ dịch vụ web khi khởi chạy ứng dụng iOS đầu tiên. Các bản ghi có số nhận dạng duy nhất của riêng chúng từ cơ sở dữ liệu trên web. Tôi đã đọc và đọc lại tài liệu của apple, các bài viết blog của cimgf, sách của Marcus Zarra về dữ liệu cốt lõi, và xem đi xem lại loạt phim của iDeveloper TV về dữ liệu cốt lõi. Tôi không thể tìm ra cách để nhập Entity A mà không giữ Entity B, C và D trong bộ nhớ hoặc thực hiện tìm nạp đắt tiền và duy trì mối quan hệ giữa các thực thể. Nếu tôi không sử dụng dữ liệu cốt lõi, tôi có thể chỉ sử dụng số nhận dạng duy nhất đã được thiết lập và quá trình nhập sẽ nhanh hơn nhiều.Cách cải thiện hiệu suất nhập dữ liệu lớn với dữ liệu cốt lõi trong ios

Nếu bạn có bất kỳ đề xuất nào, tôi là tất cả các tai.

Chúng tôi đã triển khai chiến lược này trong Android và quá trình nhập mất ~ 2,5 phút so với ~ 6 phút trên iOS nơi phần cứng trên các thiết bị khác nhau có thể so sánh được. Việc rút ngắn thời gian nhập là rất quan trọng đối với người dùng của chúng tôi vì vậy tôi đã không thể thỏa hiệp về vấn đề này. Cảm ơn trước sự giúp đỡ của bạn.

EDIT:

Đây là cách tôi đang làm việc đó - tôi có thể tạo một NSOperation mà tạo ra nó là bối cảnh riêng. Tôi nhập thực thể B, C, & D trước và giữ một mảng cho mỗi loại thực thể. Sau đó, tôi nhập Entity A và sử dụng các vị từ để lọc mảng cho các thực thể B, C, & D để liên kết thực thể A với các thực thể thích hợp trong B, C, & D. Tôi đang lưu ngữ cảnh ở các khoảng thời gian được tối ưu hóa khác nhau tùy thuộc vào loại thực thể mà tôi hiện đang nhập.

Tôi không chỉ nhập vào một bảng, tôi đang nhập nhiều bảng có liên quan với nhau. Vì vậy, nếu tôi nhập khẩu thực thể B, tôi phải giữ Entity B trong bộ nhớ hoặc lấy nó khi tôi cần nó để liên kết thực thể B với thực thể A. Có ý nghĩa?

+0

Tôi đã chỉnh sửa câu hỏi với nhiều thông tin hơn. –

+0

Dữ liệu là gì? Là duy nhất cho mỗi người dùng hoặc là nó cùng một bản ghi 18k cho tất cả mọi người? –

+0

Duy nhất cho mỗi người dùng. Tôi phải thực hiện đồng bộ gia tăng sau khi đồng bộ hóa ban đầu khi người dùng sử dụng ứng dụng. –

Trả lời

9

tôi sẽ nêu vấn đề cùng mọi câu hỏi cốt lõi dữ liệu được, và sau đó chuyển sang: Hãy chắc chắn rằng bạn thực sự muốn sử dụng Core Data cho điều này và không chỉ SQLite trực tiếp. Dữ liệu cốt lõi dành cho các đồ thị đối tượng bền bỉ, không phải là một cơ sở dữ liệu chung. Nếu bạn đã triển khai một cơ sở dữ liệu cho Android, thì bạn có thể muốn sử dụng cùng một lược đồ và thiết kế trên iOS.

OK, đã loại bỏ điều đó. Giả sử đĩa CD thực sự là công cụ tốt nhất cho công việc ở đây (hoặc bạn không thể thay đổi nó vào thời điểm này). Suy nghĩ đầu tiên của tôi ở đây là ăn gian. Cấp, đó thường là một trong những suy nghĩ ban đầu của tôi ....

Xem tốc độ bạn có thể chèn các đối tượng này không có mối quan hệ. Nếu đủ nhanh, thì đây là cách bạn lừa dối: không lưu trữ các mối quan hệ thực tế lúc đầu. Lưu trữ danh sách chuỗi các số nhận dạng mô tả mối quan hệ. Sau đó, sau khi mọi thứ được tải và người dùng có thể bắt đầu làm việc, theo thời gian chuyển đổi các mối quan hệ chuỗi thành các mối quan hệ thực trong nền.Bất cứ khi nào bạn lấy một bản ghi, bạn cần kiểm tra xem nó có thuộc tính bộ lặp hay không và nếu vậy, bạn sẽ cần tìm nạp các mối quan hệ của nó bằng tay (và sau đó xóa thuộc tính bộ lặp).

Điều này không làm cho quá trình nhập đầy đủ nhanh hơn, nhưng nó cho ảo giác rằng nó nhanh hơn và đó là mục tiêu trong iOS 90% thời gian. Bạn thậm chí có thể phải ngăn chặn các hoạt động nhất định (như xóa) cho đến khi bạn hoàn tất việc dán mọi thứ, nhưng điều đó có lẽ vẫn tốt hơn là chặn hoàn toàn người dùng.

+0

Đó là những gì tôi sợ. Tôi thích đối phó với dữ liệu của tôi như là các đối tượng, vì vậy tôi đã hy vọng cho một cách để làm cho Core Data là giải pháp đúng, nhưng cho đến nay, nó không. –

+0

+ 1 cho câu trả lời của bạn. –

0

Tôi không nói về quy trình bạn đang theo dõi, nhưng bạn có cân nhắc việc sử dụng các khối và GCD (Grand Central Dispath) không? Tôi đoán nó đã được trình bày từ một nhân viên của LinkedIn về ứng dụng iPhone của họ trong iTunesU. Nếu tôi nhớ chính xác, họ cũng đang sử dụng GCD.

"... GCD API, hỗ trợ thực thi không đồng bộ các hoạt động ở cấp Unix của hệ thống. Bạn có thể sử dụng API này để quản lý tương tác với mô tả tệp, cổng Mach, tín hiệu hoặc bộ hẹn giờ ... "

https://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html#//apple_ref/doc/uid/TP40008079

+2

Tôi nghĩ việc chuyển từ NSOperations sang GCD chỉ có thể cho tôi một vài phần nghìn giây nếu như có, nhưng lượng thời gian mã hóa và sau đó kiểm tra mã để chuyển sang GCD là không hợp lý vào thời điểm này. Tôi nghĩ rằng tôi cần phải sao lưu và punt, rip ra các dữ liệu cốt lõi. –

+0

Đồng ý. GCD sẽ không thay đổi bất cứ điều gì ở đây. Chặn thậm chí ít hơn như vậy. –

5

Có vẻ như bạn đang trải qua những cơn đau mà anh chàng này đã trải qua, và cuối cùng anh ấy đã tách ra Core Data. Có phải là một cách tốt hơn! http://inessential.com/2010/02/26/on_switching_away_from_core_data

+0

Hãy suy nghĩ chính xác giống như anh chàng này, Brent Simmons. Trước khi bắt đầu dự án lớn, điều quan trọng là KHÔNG chọn công nghệ sai, để tiết kiệm thời gian và có kết quả tốt hơn. Cảm ơn cho đăng liên kết này! – Alex

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