2009-11-18 40 views
8

Tôi có một ý tưởng cho một webapp cho iPhone nhưng nó không biết với tôi bao nhiêu dữ liệu có thể được lưu trữ trong db SQLite Safari của điện thoại di động. Tôi cố gắng tìm kiếm thông qua các tài liệu của Apple nhưng không tìm thấy gì:Có bao nhiêu lưu trữ SQLite trên iPhone?

Safari Client-Side Storage and Offline Applications Programming Guide: Using the JavaScript Database

+1

Bạn muốn lưu trữ bao nhiêu dữ liệu? – Mark

Trả lời

2

Giống như các áp phích khác nói. Bạn chỉ bị giới hạn bởi dung lượng ổ đĩa trên thiết bị.

Bạn cũng cần xem xét đến dung lượng bộ nhớ của mình. Có một số lượng hạn chế bộ nhớ trên iphone, và nói chung nó là nhỏ yên tĩnh, do đó, số lượng dữ liệu/các đối tượng ngậm nước bạn sẽ có thể có trong bộ nhớ là một giới hạn tiềm năng cho ứng dụng của bạn.

+0

Tôi nghĩ rằng vì SQLite dựa trên các tệp phẳng nên sẽ không có ràng buộc về bộ nhớ đối với lưu trữ tổng thể. Rõ ràng là có một giới hạn cho những gì bạn có thể tải vào bộ nhớ cùng một lúc, nhưng điều đó không ảnh hưởng đến quyền lưu trữ tệp? – Geuis

+0

Không, nó sẽ không ảnh hưởng đến bộ nhớ, chỉ là giới hạn của những gì bạn có thể có trong bộ nhớ tại bất kỳ thời điểm nào. Tôi đề cập đến nó bởi vì bạn có vẻ như bạn đang xử lý một tập dữ liệu khá lớn. –

+1

Đây không phải là trường hợp cho Mobile Safari. Trong thử nghiệm của tôi có vẻ như bạn bị giới hạn 50MB. –

0

Bạn chỉ bị giới hạn bởi dung lượng miễn phí trên thiết bị.

0

Tôi không chắc chắn. Nếu bạn đang làm ứng dụng của riêng bạn, bạn sẽ bị giới hạn bởi không gian trống trên thiết bị và ở một mức độ nào đó trong bộ nhớ (như Bryan McLemore chỉ ra).

Tuy nhiên vì bạn đang xem xét việc sử dụng JavaScript bên trong Safari nên không có cách nào dễ dàng để nói. Theo tài liệu bạn thấy có vẻ như nó có thể bị giới hạn bởi trang web, nhưng không có gì cho bạn biết bao nhiêu. Tôi muốn đề nghị viết một kịch bản nhanh để điền vào cơ sở dữ liệu và tìm ra nó thực sự là bao nhiêu. Sau đó, tôi có lẽ sẽ giảm một nửa giá trị đó và cho rằng tôi sẽ luôn có thể sử dụng nó nhiều.

Hãy chắc chắn báo cáo lại để tất cả chúng ta đều biết!

+0

Ồ, và lưu ý cho tất cả việc đọc này - đi đến liên kết tài liệu được đề cập trong câu hỏi và thêm một bình luận đề xuất với Apple rằng tài liệu được cập nhật. –

0

Rất có thể là 32 terabyte ... vượt quá dung lượng đĩa sẵn có.

Tôi đã đạt đến con số này bằng cách nhân kích thước trang tối đa cho số trang tối đa được liệt kê ở cuối số SQLite limits page.

0

Limits Trong SQLite

"Limits" trong bối cảnh của bài viết này có nghĩa là kích thước hoặc số lượng mà không thể vượt qua. Chúng tôi quan tâm đến những thứ như số byte tối đa trong BLOB hoặc số lượng cột tối đa trong một bảng.

SQLite ban đầu được thiết kế với chính sách tránh giới hạn tùy ý. Tất nhiên, mọi chương trình chạy trên máy có bộ nhớ hữu hạn và dung lượng đĩa đều có giới hạn của một số loại. Nhưng trong SQLite, những giới hạn đó không được xác định rõ. Chính sách là nếu nó phù hợp với bộ nhớ và bạn có thể đếm nó với một số nguyên 32 bit, thì nó sẽ hoạt động.

Thật không may, chính sách không giới hạn đã được hiển thị để tạo sự cố. Bởi vì các giới hạn trên không được xác định rõ ràng, chúng không được thử nghiệm, và các lỗi (bao gồm khai thác an ninh có thể) thường được tìm thấy khi đẩy SQLite đến cực đoan. Vì lý do này, các phiên bản SQLite mới hơn có các giới hạn được xác định rõ ràng và các giới hạn đó được kiểm tra như một phần của bộ kiểm thử. Kể từ phiên bản 3.6.19 (tất cả các số liệu thống kê trong báo cáo chống lại việc phát hành SQLite), thư viện SQLite bao gồm xấp xỉ 65,7 KSLOC của mã C. (KSLOC có nghĩa là hàng ngàn "Nguồn dòng mã" hay nói cách khác là các dòng mã không bao gồm các dòng trống và các chú thích.) Khi so sánh, dự án có 690 lần mã thử nghiệm và các kịch bản thử nghiệm - 45409.7 KSLOC.

0

Giới hạn lưu trữ mặc định trên iPhone có vẻ là 5MB

11

Hầu hết các câu trả lời là hoàn toàn sai.Safari sẽ không cho phép bạn tạo cơ sở dữ liệu SQLite trên 50MB (hoặc mở rộng cơ sở dữ liệu hiện có vượt quá kích thước đó).

Đây là giới hạn áp đặt bởi Safari - như những người khác đã lưu ý, bản thân SQLite hỗ trợ cơ sở dữ liệu lớn hơn nhiều mà bạn có thể sử dụng từ ứng dụng gốc. Nhưng các ứng dụng web được giới hạn ở mức 50MB. Nó có thể hữu ích để lưu ý rằng đây là một cơ sở dữ liệu - nếu bạn thực sự cần thêm không gian, bạn có thể tạo nhiều cơ sở dữ liệu, mặc dù điều này rõ ràng sẽ gây ra rất nhiều rắc rối.

+0

Tôi cũng đã xác nhận giới hạn 50MB trên một cơ sở dữ liệu duy nhất. Bạn có chắc chắn rằng đây là giới hạn cho mỗi cơ sở dữ liệu không phải là giới hạn tổng thể của trang web không? Giới hạn –

+0

50MB cho mỗi DB. Và quyền được yêu cầu chỉ cho 50MB DB đầu tiên bạn tạo. – newtonapple

+0

Giới hạn kích thước cơ sở dữ liệu trên thiết bị di động safari, là 50 mb trên mỗi trang web không phải cho mỗi cơ sở dữ liệu. tôi đã thử nghiệm điều này. ngay cả khi bạn có thêm một cơ sở dữ liệu trống, bạn không thể thêm vào nó nếu tổng kích thước của tất cả các cơ sở dữ liệu trên một trang là 50 mb –

2

Có rất nhiều người trả lời rõ ràng chưa bao giờ thử nghiệm nó. Tôi đang sử dụng phiên bản iOS mới nhất (4.3.3) và đã thiết lập một hệ thống để tạo nhiều cơ sở dữ liệu và giữ chúng dưới 45 MB nhưng nhận thấy rằng giới hạn 50 MB dành cho trang web nói chung. Vì vậy, bất kể bạn chia dữ liệu bao nhiêu, nó vẫn hạn chế nó với giới hạn tổng cộng là 50 MB.

0

davibe đã thực hiện một số công việc để tăng giới hạn tối đa 1GB bằng plugin PhoneGap của mình. https://github.com/davibe/Phonegap-SQLitePlugin

Plugin gọi API gốc sqlite3, có trình bao bọc ở phía Javascript.
Mã liên quan chiết xuất từ ​​sqlite.js là:

update origins set quota = '999999999999' where origin = 'file__0'; 
"update databases set estimatedSize = '999999999999' where name = '" + dbName + "';'"; 
0

Chú ý: iphone của tôi là jailbroken! Nhưng tôi không nghi ngờ rằng điều này thay đổi bất cứ điều gì.



Giới hạn 50MB không còn chính xác.



Trên iPhone 4S của tôi với iOS 6.1 Tôi có một cơ sở dữ liệu của 58,66 MB (448.496 hồ sơ) cho webclip tôi (website gắn vào bàn đạp).

Không có thủ thuật đặc biệt nào, chỉ cần sử dụng HTML5 tiêu chuẩn.

1

Giới hạn kích thước cơ sở dữ liệu trên thiết bị di động safari là 50 mb trên mỗi trang web không phải cho mỗi cơ sở dữ liệu. tôi đã thử nghiệm điều này. ngay cả khi bạn có thêm cơ sở dữ liệu trống, bạn không thể thêm vào nếu tổng kích thước của tất cả cơ sở dữ liệu trên một trang web là 50 mb

điều đáng chú ý là ký tự được lưu dưới dạng byte kép trên websql. triệu ký tự sẽ là 4 megabyte không phải 2 megabyte trên đĩa.

0

tối đa Kích thước cơ sở dữ liệu

Vui lòng tham khảo Official Sqlite site

Mỗi cơ sở dữ liệu bao gồm một hoặc nhiều "trang". Trong một cơ sở dữ liệu duy nhất, mỗi trang có cùng kích thước, nhưng cơ sở dữ liệu khác nhau có thể có kích thước trang là sức mạnh của hai từ 512 đến 65536, bao gồm. Kích thước tối đa của một tệp cơ sở dữ liệu là 2147483646 trang. Ở kích thước trang tối đa là 65536 byte, điều này sẽ chuyển thành kích thước cơ sở dữ liệu tối đa khoảng 1,4e + 14 byte (140 terabyte hoặc 128 tbibyte hoặc 140.000 gigabyte hoặc 128.000 gibibyte).

Giới hạn trên cụ thể này chưa được kiểm tra vì các nhà phát triển không có quyền truy cập vào phần cứng có khả năng đạt đến giới hạn này.Tuy nhiên, các bài kiểm tra xác minh rằng SQLite hoạt động chính xác và an toàn khi một cơ sở dữ liệu đạt kích thước tệp tối đa của hệ thống tệp cơ bản (thường nhỏ hơn nhiều so với kích thước cơ sở dữ liệu lý thuyết tối đa) và khi cơ sở dữ liệu không thể phát triển do hết dung lượng đĩa.

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