2009-08-03 47 views
13

Chúng tôi biết công cụ cơ sở dữ liệu MS Access được 'throttled' để cho phép kích thước tệp tối đa là 2GB (hoặc có thể trong nội bộ có giới hạn ít hơn một số sức mạnh của 2 trang dữ liệu 4KB). Nhưng điều này có ý nghĩa gì trong các thuật ngữ thực tế?Số lượng hàng tối đa trong bảng cơ sở dữ liệu MS Access?

Để giúp tôi đo lường điều này, bạn có thể cho tôi biết số hàng tối đa có thể được chèn vào bảng cơ sở dữ liệu MS Access không?

Để đáp ứng định nghĩa của một bảng, tất cả các hàng phải là duy nhất, do đó một hạn chế duy nhất (ví dụ PRIMARY KEY, UNIQUE, CHECK, dữ liệu vĩ mô, vv) là một yêu cầu.

EDIT: Tôi nhận ra có giới hạn lý thuyết nhưng điều tôi quan tâm là thực tế (và không nhất thiết là thực tế), giới hạn tuổi thọ thực tế.

+0

Có thể chèn các hàng trùng lặp cập nhật giá trị khóa rpimary của bản ghi. –

+0

@Ralph Rickenbach: cảm ơn, tôi đã không nghĩ đến điều đó (doh!) Tôi đã chỉnh sửa câu hỏi để tạo ra một ràng buộc duy nhất một yêu cầu. – onedaywhen

+1

Tôi không nghĩ rằng Jet/ACE bị "throttled" vô nghĩa vì nó có thể trong nội bộ có dây để được giới hạn ít hơn một số sức mạnh của 2 trang dữ liệu 4KB (tôi không nhận được bất kỳ số vòng đẹp cố gắng này ra , do đó, phải có một số chi phí trong đó một nơi nào đó). Mặc dù nó có thể không khó thay đổi, nó sẽ không phục vụ lợi ích của các dòng sản phẩm lớn hơn của MS, đặc biệt là họ thực sự làm THROTTLE SQL Server Express ở mức 4GB - chúng ta biết đó là cùng một công cụ như SQL Server đầy đủ, nhưng với hạn chế nhân tạo. –

Trả lời

7

Đây là nỗ lực của tôi:

Tôi tạo ra một single-cột (INTEGER) bảng không có chìa khóa:

CREATE TABLE a (a INTEGER NOT NULL); 

số nguyên chèn theo thứ tự bắt đầu từ 1.

tôi dừng lại nó (tùy tiện sau nhiều giờ) khi nó đã chèn 65.632.875 hàng. Kích thước tệp là 1.029,772 KB.

Tôi đã nén tệp giảm nhẹ xuống còn 1.029,704 KB.

Tôi đã thêm một PK:

ALTER TABLE a ADD CONSTRAINT p PRIMARY KEY (a); 

đó tăng kích thước tập tin đến 1.467.708 KB.

Điều này cho thấy mức tối đa là một nơi nào đó quanh mốc 80 triệu.

0

Tất cả đều phụ thuộc. Về mặt lý thuyết, sử dụng một cột đơn có loại dữ liệu 4 byte. Bạn có thể lưu trữ 300 000 hàng. Nhưng có lẽ rất nhiều chi phí trong cơ sở dữ liệu ngay cả trước khi bạn làm bất cứ điều gì. Tôi đọc một số nơi bạn có thể có 1.000.000 hàng nhưng một lần nữa, tất cả đều phụ thuộc ..

Bạn cũng có thể liên kết cơ sở dữ liệu với nhau. Hạn chế bản thân để chỉ không gian đĩa.

+0

Toán học của các bản ghi 4 byte và 300K hàng không thêm chút nào. Tôi đã có cơ sở dữ liệu về sử dụng sản xuất dài hạn với hơn 300 nghìn hàng trong 3 bảng (và một bảng với hai lần) và các bản ghi phức tạp hơn nhiều so với một trường 4 byte đơn. Tệp dữ liệu có kích thước nhỏ hơn 500MB đáng kể (nhiều hơn một nửa). –

+0

có bạn nói đúng. Im thiếu một số zeroes. (2 gigabyte)/(4 Bytes) = 536 870 912 – Tommy

1

Chúng tôi không nhất thiết phải nói đến các giới hạn lý thuyết ở đây, chúng ta đang nói về giới hạn thực của lược đồ cơ sở dữ liệu và kích thước tệp tối đa 2GB.

  • db của bạn là một bảng đơn hay nhiều?
  • Mỗi bảng có bao nhiêu cột?
  • Các kiểu dữ liệu là gì?

Giản đồ dựa trên số lượng hàng trong xác định số hàng bạn có thể có.

Chúng tôi đã sử dụng MDB truy cập để lưu trữ dữ liệu MS-SQL xuất để phân tích thống kê bởi một số người dùng doanh nghiệp của chúng tôi. Trong những trường hợp này, chúng tôi đã xuất cấu trúc bảng lõi của mình, thường là bốn bảng có từ 20 đến 150 cột thay đổi từ một trăm byte mỗi hàng trở lên là 8000 byte mỗi hàng. Trong những trường hợp này, chúng tôi sẽ gặp phải hàng trăm nghìn hàng dữ liệu được phép PER MDB mà chúng tôi sẽ gửi chúng.

Vì vậy, tôi không nghĩ rằng câu hỏi này có câu trả lời khi không có lược đồ của bạn.

+0

Tôi không có lược đồ. Thách thức là để bạn có thể đưa ra một lược đồ sẽ mang lại cho bảng có nhiều hàng nhất có thể (gợi ý: Tôi đang nghĩ một bảng một cột duy nhất). – onedaywhen

+0

Khóa cấp độ hàng cũng tạo ra sự khác biệt, vì nó buộc một trang dữ liệu duy nhất cho mỗi bản ghi. –

+0

Có, câu trả lời sẽ là hàng triệu và sẽ mất nhiều thời gian để đạt được. Tôi sẽ ngạc nhiên nếu không có ai làm điều này trước đây :) – onedaywhen

2

Đã một vài năm kể từ lần cuối cùng tôi làm việc với Access nhưng tệp cơ sở dữ liệu lớn hơn luôn được sử dụng để có nhiều sự cố hơn và dễ bị tham nhũng hơn các tệp nhỏ hơn. Trừ khi tệp cơ sở dữ liệu chỉ được truy cập bởi một người hoặc được lưu trữ trên mạng mạnh mẽ, bạn có thể thấy đây là vấn đề trước khi đạt đến giới hạn kích thước cơ sở dữ liệu 2GB.

+0

-1 Sử dụng một sản phẩm SQL khác sẽ không giúp tôi tìm ra giới hạn thực tế của bảng cơ sở dữ liệu Access. – onedaywhen

+1

Tôi không nhận ra rằng tôi đã ủng hộ việc sử dụng một sản phẩm SQL khác trong nhận xét của mình?Tôi đã chỉ ra rằng một yếu tố quan trọng trong việc xác định giới hạn thực tế (bất cứ điều gì có thể có nghĩa) về kích thước của cơ sở dữ liệu Access là khả năng của cả hai phục vụ một tệp lớn và phục vụ tệp lớn này cho nhiều người dùng đồng thời. –

+0

Ứng dụng đầu cuối được thiết kế phù hợp sẽ không truy xuất thêm bất kỳ dữ liệu nào cho đầu cuối Jet/ACE với 1 triệu bản ghi hơn 1000 bản ghi vì Jet/ACE truy xuất trang chỉ mục cho tập dữ liệu được yêu cầu, sau đó chỉ các trang dữ liệu lưu trữ các bản ghi đó. Điều này sẽ chính xác cùng một lượng dữ liệu trong cả hai ngữ cảnh. Chỉ khi bạn đang thực hiện quét toàn bộ bảng (vì bạn là kẻ ngốc) thì kịch bản của bạn sẽ có liên quan. –

4

Như những người khác đã tuyên bố đó là sự kết hợp giữa lược đồ của bạn và số chỉ mục.

Một người bạn có khoảng 100.000.000 giá cổ phiếu lịch sử, báo giá đóng cửa hàng ngày, trong MDB tiếp cận giới hạn 2 Gb.

Anh ta kéo chúng xuống bằng cách sử dụng một số mã được tìm thấy trong bài viết cơ sở Kiến thức Microsoft.Tôi đã khá ngạc nhiên rằng bất cứ máy chủ nào mà anh ta sử dụng đã không cắt giảm anh ta sau 100 nghìn bản ghi đầu tiên.

Anh ấy có thể xem bất kỳ bản ghi nào trong vòng một giây.

+0

Tôi sẽ nói rằng để có được không gian tối đa, bạn cũng muốn tạo cơ sở dữ liệu của mình bằng mã, vì vậy nó là Máy bay phản lực thuần túy, không có bất kỳ tính năng Access-specific không cần thiết nào. –

+0

@Tony Toews: câu hỏi này là về giới hạn thực tế. Không có giai thoại, cảm ơn. – onedaywhen

+1

... nhưng một liên kết đến bài viết cơ sở tri thức Microsoft đó có thể giúp bạn có một số đại diện :) – onedaywhen

12

Một số nhận xét:

  1. file Jet/ACE được tổ chức trong các trang dữ liệu, có nghĩa là có một số tiền nhất định của không gian chùng khi ranh giới kỷ lục của bạn không phù hợp với các trang dữ liệu của bạn.

  2. Khóa cấp hàng sẽ giảm đáng kể số lượng bản ghi có thể, vì nó bắt buộc một bản ghi trên mỗi trang dữ liệu.

  3. Trong máy bay phản lực 4, kích thước trang dữ liệu được tăng lên 4KB (từ 2KB trong Máy bay phản lực 3.x). Vì Jet 4 là phiên bản Jet đầu tiên hỗ trợ Unicode, điều này có nghĩa là bạn có thể lưu trữ 1GB dữ liệu hai byte (tức là 1.000.000.000 ký tự 2 byte) và với tính năng nén Unicode được bật, 2GB dữ liệu. Vì vậy, số lượng hồ sơ sẽ bị ảnh hưởng bởi việc bạn có nén Unicode hay không.

  4. Vì chúng tôi không biết có bao nhiêu phòng trong một tập tin Jet/ACE được đưa lên bởi các tiêu đề và siêu dữ liệu khác, cũng không cần lưu trữ chỉ số phòng, tính toán lý thuyết luôn luôn .

  5. Để nhận được bộ nhớ hiệu quả nhất, bạn muốn sử dụng mã để tạo cơ sở dữ liệu thay vì Access UI, vì Access tạo ra các thuộc tính nhất định mà Jet thuần túy không cần. Đây không phải là để nói rằng có rất nhiều, vì các thuộc tính được thiết lập mặc định Access thường không được đặt ở tất cả (thuộc tính được tạo chỉ khi bạn thay đổi nó từ giá trị mặc định - điều này có thể được nhìn thấy bằng cách đi qua trường tập hợp thuộc tính, nghĩa là nhiều thuộc tính được liệt kê cho một trường trong trình thiết kế bảng Access không có trong bộ sưu tập thuộc tính vì chúng chưa được đặt), nhưng bạn có thể muốn giới hạn bản thân đối với kiểu dữ liệu dành riêng cho máy bay phản lực (trường siêu kết nối) chẳng hạn như Access-only).

Tôi chỉ lãng phí một giờ mucking xung quanh với điều này sử dụng Rnd() để cư 4 lĩnh vực quy định as type byte, với PK tổng hợp trên bốn lĩnh vực, và nó đã mãi mãi để nối thêm đủ hồ sơ để nhận được lên đến bất kỳ phần đáng kể 2GB. Với hơn 2 triệu bản ghi, tệp dưới 80MB. Cuối cùng tôi đã bỏ thuốc lá sau khi đạt được chỉ 700K 7 TRIỆU hồ sơ và tệp được nén thành 184MB. Lượng thời gian cần thiết để đạt được gần 2GB chỉ là nhiều hơn tôi sẵn sàng đầu tư!

+0

Sau đó, thời gian để kiểm tra MDB có thể là do thời gian dành cho việc lập chỉ mục khóa tổng hợp. Tôi tự hỏi nếu nó đã được nhanh hơn rất nhiều chỉ bằng cách sử dụng một phím số tự động. –

+0

+1 cho một câu trả lời một phần trong tinh thần của câu hỏi :) – onedaywhen

+0

Thực ra, tôi khá chắc chắn lý do hàng loạt cuối cùng mất quá lâu là vì đã có hơn 9000 lỗi để loại bỏ (thêm 2 triệu bản ghi). Những gì tôi đã làm là ngừng sử dụng Rnd() và sử dụng bảng làm nguồn, chỉ cần trao đổi các cột. Điều này đã làm, tất nhiên, kết quả trong một số bản sao, và tôi chắc chắn đó là những gì gây ra nó để mất hơn một giờ để nối thêm những hồ sơ. –

0

Thực tiễn = 'hữu ích trong thực tế' - vì vậy tốt nhất bạn sẽ nhận được là giai thoại. Mọi thứ khác chỉ là tạo mẫu và kiểm tra kết quả.

Tôi đồng ý với những người khác - xác định 'số lượng bản ghi tối đa' hoàn toàn phụ thuộc vào lược đồ - # bảng, # trường, # chỉ mục.

Một giai thoại khác cho bạn: Gần đây tôi đã đạt kích thước tệp 1,6 GB với 2 cửa hàng dữ liệu chính (bảng), tương ứng là 36 và 85, với một số bản sao con trong 3 bảng bổ sung.

Ai quan tâm nếu dữ liệu là duy nhất hay không - chỉ tài liệu nếu ngữ cảnh cho biết. Dữ liệu là dữ liệu là dữ liệu, trừ khi trùng lặp ảnh hưởng đến việc xử lý bởi người lập chỉ mục.

Tổng số hàng tạo nên 1,6 GB là 1,72M.

+1

Tôi sẽ để cho bạn ở trên một bí mật: điều này chỉ có nghĩa là một thách thức thú vị :) Bởi 'thực tế' tôi có nghĩa là trong thực tế, như trái ngược với lý thuyết, vì vậy giai thoại không phải là những gì tôi sau, cảm ơn. – onedaywhen

0

Khi làm việc với 4 bảng Db2 lớn, tôi không chỉ tìm thấy giới hạn mà còn khiến tôi trông rất tệ với một ông chủ nghĩ rằng tôi có thể thêm cả bốn bảng (mỗi bảng có trên 900.000 hàng) vào một bảng lớn. kết quả thực tế là bất kể số lần tôi thử Bảng (có 34 cột - 30 văn bản và 3 số nguyên) sẽ tiết ra một số thông điệp khó hiểu "Không thể mở định dạng không xác định cơ sở dữ liệu hoặc tệp có thể bị hỏng". Bottom Line là ít hơn 1.500.000 bản ghi và chỉ hơn một chút so với 1.252.000 với 34 hàng.

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