MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Giảm bộ nhớ được sử dụng khi tải khung dữ liệu gấu trúc khổng lồ từ MongoDB

Những gì trong một CSV và những gì trong một khung dữ liệu là hai điều rất khác nhau. Ví dụ:9.99.99999999999999 trong CSV sẽ chiếm cùng một lượng không gian trong khung dữ liệu.

Điều đó nói rằng, dữ liệu trong khung dữ liệu chiếm ít dung lượng hơn nhiều so với dữ liệu trong danh sách. Việc xây dựng một danh sách rất tốn kém về bộ nhớ; và việc thêm vào khung dữ liệu yêu cầu gấu trúc phải tạo khung dữ liệu mới (lớn hơn), sao chép mọi thứ, sau đó để khung dữ liệu ban đầu được thu thập.

Bạn có thể sẽ làm tốt hơn nhiều nếu bạn phân bổ trước một khung dữ liệu gồm 60000 hàng (hoặc tuy nhiên, bạn có tổng cộng bao nhiêu hàng); ví dụ:

data = pd.DataFrame(np.empty((60000,), dtype=[
    ('x', np.uint8),
    ('y', np.float64)
]))

và sau đó cho từng hàng được chèn dữ liệu cho hàng đó mà không cần dựa vào dataset danh sách:

data.values[count,:] = rowdata_at_count

Điều này không an toàn về kiểu chữ, nhưng nó diễn ra khá nhanh (vì không có phân bổ nào đang diễn ra), vì vậy hãy đảm bảo rowdata_at_count là danh sách có các phần tử tương ứng với các loại cột.

CHỈNH SỬA

Vâng, tôi tin rằng việc nối thêm 100 dòng giống như 100 đoạn nối của một dòng (vì mỗi phần nối thêm phải phân bổ lại và sao chép bảng, giống như đoạn nối). Phân bổ trước tránh được cả nối thêm và nối:kích thước bảng không thay đổi, không cần phân bổ lại và sao chép.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm phần tử tối đa bên trong một mảng

  2. cách thực thi lệnh quản trị mongo từ java

  3. findOne hoạt động nhưng không nhận được tất cả / tìm thấy

  4. mongodb và mongomapper

  5. Nhận các bản ghi ngẫu nhiên và hiển thị ở định dạng cụ thể bằng PHP và MongoDB