Tôi đang ở giai đoạn đầu viết chế độ chính của Emacs cho mạng Stack Exchange ; nếu bạn sử dụng Emacs thường xuyên, điều này sẽ có lợi cho bạn cuối cùng.
Để giảm thiểu số lượng cuộc gọi được thực hiện cho API của Stack Exchange (giới hạn ở mức 10000 mỗi IP mỗi ngày) và để trở thành một công dân có trách nhiệm chung, tôi muốn lưu trữ thông tin tôi nhận được từ mạng và lưu trữ trong bộ nhớ, chờ được truy cập lại. Tôi thực sự bế tắc về cấu trúc dữ liệu để lưu trữ thông tin này.
Rõ ràng, nó sẽ là một danh sách. Tuy nhiên, như với bất kỳ cấu trúc dữ liệu nào, sự lựa chọn phải được xác định bởi dữ liệu nào đang được lưu trữ và cách thức nó sẽ được truy cập. Điều gì, tôi muốn có thể lưu trữ tất cả các thông tin này trong một biểu tượng duy nhất như stack-api/cache
. Vì vậy, không cần phải quảng cáo thêm, stack-api/cache
là một danh sách các nhược điểm được cập nhật lần cuối:
`(<csite> <csite> <csite>)
<csite>
sẽ ở đâu
(1362501715 . <site>)
Tại thời điểm này, tất cả những gì chúng tôi đã làm là xác định một danh sách liên kết đơn giản . Tất nhiên, chúng ta phải đi sâu hơn .
Mỗi cái <site>
là một danh sách các tham số API (duy nhất) theo sau là một câu hỏi danh sách:
`("codereview" <cquestion> <cquestion> <cquestion>)
Mỗi người <cquestion>
, bạn đoán nó, một nhược điểm của câu hỏi với thời gian cập nhật cuối cùng của họ:
`(1362501715 <question>) (1362501720 . <question>)
<question>
là một nhược điểm của question
cấu trúc và danh sách các câu trả lời (một lần nữa, được chấp nhận với thời gian cập nhật cuối cùng của chúng ):
`(<question-structure> <canswer> <canswer> <canswer>
và `
`(1362501715 . <answer-structure>)
Cấu trúc dữ liệu này có thể được mô tả chính xác nhất như một cái cây, nhưng tôi không biết liệu có cách nào tốt hơn để xem xét ngôn ngữ này không, Emacs Lisp (không khác gì so với Lisp mà bạn biết và yêu thích cả ) . Những nhược điểm rõ ràng có thể không cần thiết, nhưng nó giúp bộ não của tôi bao bọc nó tốt hơn. Tôi khá chắc chắn <csite>
, ví dụ, sẽ biến thành
(<epoch-time> <api-param> <cquestion> <cquestion> ...)
Mối quan tâm:
- Việc lưu trữ dữ liệu trong một cấu trúc có khả năng lớn như thế này có bất kỳ sự đánh đổi hiệu năng nào cho hệ thống không? Tôi muốn tránh lưu trữ dữ liệu không liên quan, nhưng tôi đã làm những gì có thể và tôi không nghĩ bộ dữ liệu đó lớn ở nơi đầu tiên (đối với sử dụng bình thường) vì tất cả chỉ là văn bản có thể đọc được ở người theo tỷ lệ hợp lý. (Tôi đang lên kế hoạch loại bỏ dữ liệu cũ bằng cách sử dụng thời gian ở đầu danh sách; mỗi lần thừa hưởng thời gian cập nhật lần cuối từ con cái của nó và trên cây. Ở mức độ nào thì việc hủy bỏ này sẽ diễn ra: Tôi không chắc chắn rồi.)
- Việc lưu trữ dữ liệu như thế này có bất kỳ sự đánh đổi hiệu suất nào đối với việc phải sử dụng nó không? Đó là, sẽ thiết lập và truy xuất các hoạt động phải chịu kích thước của danh sách?
Bạn có gợi ý nào khác về cấu trúc tốt hơn trông như thế nào không?
org
); chèn vào <!-- language: blah>
nơi cần thiết (tùy thuộc vào chế độ chỉnh sửa mã được thực hiện); những thứ như thế. Xem README trên GitHub để biết thêm thông tin và cảm thấy hoan nghênh nhất khi đề xuất các tính năng. Tôi càng biết nhiều về điều này trước khi ra tay, nó càng có thể được thiết kế tốt hơn. chỉnh sửa không đề cập đến keybindings của emacs;)