2011-03-06 26 views
5

Tôi muốn loại bỏ phụ thuộc sql của khối nhỏ dữ liệu mà tôi tải trên (gần như) mỗi yêu cầu trên một ứng dụng web. Hầu hết dữ liệu là khóa-giá trị/tài liệu có cấu trúc, nhưng một giải pháp quan hệ không bị loại trừ. Dữ liệu không quá lớn nên tôi muốn giữ nó trong bộ nhớ để có tính sẵn sàng cao hơn.Khuyến nghị cho một cơ sở dữ liệu trong bộ nhớ

Bạn nên giới thiệu giải pháp nào?

+0

Bạn có thể chia sẻ chồng web bạn đang sử dụng không? LAMP hoặc .NET hoặc? – DuckMaestro

Trả lời

6

Bộ nhớ khóa-giá trị trong bộ nhớ đơn giản và được sử dụng rộng rãi nhất là MemcacheD. Trang giới thiệu lặp lại những gì bạn đang yêu cầu:

Memcached là lưu trữ khóa-giá trị trong bộ nhớ cho các khối dữ liệu tùy ý, các cuộc gọi API hoặc trang dựng hình.

Danh sách khách hàng thật ấn tượng. Đã lâu rồi. Tài liệu tốt. Nó có API cho hầu như mọi ngôn ngữ lập trình. Chia tỷ lệ ngang khá đơn giản. Như kinh nghiệm của tôi đi Memcached là tốt.

Bạn cũng có thể muốn xem xét MemBase.

1

Tôi không chắc chắn đây là những gì bạn đang tìm kiếm nhưng bạn nên nhìn vào một khuôn khổ bộ nhớ đệm (một cái gì đó có thể được bao gồm trong các công cụ bạn đang sử dụng bây giờ). Với một mẫu kho lưu trữ bạn yêu cầu dữ liệu, ở đó bạn kiểm tra xem bạn có nó trong bộ đệm ẩn theo khóa hay không. Tôi không, bạn lấy nó từ cơ sở dữ liệu, nếu bạn làm, bạn lấy nó từ bộ nhớ cache.

Điều đó sẽ tùy thuộc vào loại dữ liệu bạn đang xử lý để bạn quyết định khoảng thời gian lưu dữ liệu trong bộ nhớ cache. Có lẽ thời gian chờ trượt là tốt nhất vì bạn sẽ giữ dữ liệu miễn là khóa vẫn đang được yêu cầu. Điều đó có nghĩa là nếu bộ nhớ cache có dữ liệu cho người dùng, khi người dùng biến mất, dữ liệu sẽ hết hạn từ bộ nhớ cache.

6

Redis hoàn hảo cho loại dữ liệu này. Nó cũng hỗ trợ một số cơ sở dữ liệu cơ bản và cung cấp các hoạt động trên chúng. Tôi gần đây đã chuyển đổi ứng dụng diễn đàn Django của tôi để sử dụng nó cho tất cả dữ liệu theo dõi/theo dõi thời gian thực - rất tốt để không còn cảm giác icky khi bạn thực hiện loại công cụ này (SET views = views + 1 và viết khác trên mỗi trang). xem) với một cơ sở dữ liệu quan hệ.

Dưới đây là một ví dụ của việc sử dụng Redis để lưu trữ dữ liệu cần thiết để theo dõi hoạt động người dùng, bao gồm việc giữ một bộ lệnh của người sử dụng nhìn thấy lần cuối đến nay, bằng Python:

def seen_user(user, doing, item=None): 
    """ 
    Stores what a User was doing when they were last seen and updates 
    their last seen time in the active users sorted set. 
    """ 
    last_seen = int(time.mktime(datetime.datetime.now().timetuple())) 
    redis.zadd(ACTIVE_USERS, user.pk, last_seen) 
    redis.setnx(USER_USERNAME % user.pk, user.username) 
    redis.set(USER_LAST_SEEN % user.pk, last_seen) 
    if item: 
     doing = '%s <a href="%s">%s</a>' % (
      doing, item.get_absolute_url(), escape(str(item))) 
    redis.set(USER_DOING % user.pk, doing) 
3

Nếu bạn không nhớ các sql nhưng muốn giữ db trong bộ nhớ, bạn có thể muốn kiểm tra sqlite (xem http://www.sqlite.org/inmemorydb.html).

Nếu bạn không muốn sql và bạn thực sự chỉ có cặp khóa-giá trị, tại sao không chỉ lưu trữ chúng trong một mảng bản đồ/băm/liên kết và được thực hiện với nó?

2

Nếu bạn cần một cơ sở dữ liệu trong bộ nhớ, H2 là một lựa chọn rất tốt.

2

Một cơ sở dữ liệu khác cần xem xét: Berkeley DB. Berkeley DB cho phép bạn cấu hình cơ sở dữ liệu trong bộ nhớ, trên đĩa hoặc cả hai. Nó hỗ trợ cả khóa-giá trị (NoSQL) và API SQL. Berkeley DB thường được sử dụng kết hợp với các ứng dụng web vì nó được nhúng, dễ triển khai (nó triển khai với ứng dụng của bạn), có thể cấu hình cao và rất đáng tin cậy.Có một số trang web bán lẻ điện tử dựa trên Berkeley DB cho các ứng dụng thương mại điện tử của họ, bao gồm Amazon.com.

+2

Bạn nên tiết lộ mối quan hệ của bạn với BDB trong câu trả lời này. – user7116

+1

Một vấn đề khác với BerkeleyDB là giấy phép AGPL, có nghĩa là nếu bạn muốn sử dụng nó trong ứng dụng của mình, bạn phải mua một giấy phép sở hữu độc quyền hoặc mở nguồn ứng dụng của bạn. – user1876508

0

Bạn có thể phân phát dữ liệu này không? Mô hình truy cập dữ liệu đơn giản và ổn định (không thay đổi với yêu cầu thay đổi doanh nghiệp)? Làm thế nào quan trọng là dữ liệu này (bối cảnh phiên, ví dụ, không phải là quá khó để khôi phục, trong khi một số ưu đãi người dùng đã nhập vào một trang cài đặt không nên bị mất)?

Thông thường, miễn là bạn có thể phân đoạn và mẫu truy cập dữ liệu của bạn rất đơn giản và không biến đổi quá nhiều, bạn chọn Làm lại. Nếu bạn tìm kiếm điều gì đó đáng tin cậy hơn và hỗ trợ nhiều mẫu truy cập dữ liệu nâng cao hơn, Tarantool là một lựa chọn tốt.

0

Xin đừng kiểm tra này:

http://www.mongodb.org/

của một cơ sở dữ liệu thực sự tốt Không-SQL với trình điều khiển và hỗ trợ cho tất cả các ngôn ngữ chính.

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