Năm đó, Vừa tốt nghiệp trường đại học chuyên ngành công nghệ thông tinđánh bài online, ban đầu anh ấy cũng không thực sự rõ mình muốn làm công việc nào, chỉ biết rằng trước mắt sẽ tìm một công ty internet để làm về kỹ thuật đã. Sau khi ra trường, anh ấy bắt đầu tham gia các buổi phỏng vấn và gửi CV đến nhiều nơi, với hy vọng tìm được một môi trường phù hợp để tích lũy kinh nghiệm. Dần dần, từ những trải nghiệm nhỏ nhặt trong quá trình làm việc, anh ấy bắt đầu nhận ra đam mê của mình và định hình rõ hơn về con đường sự nghiệp phía trước.
Một ngày nọđánh bài online, cậu bé Tiểu Bạch đến một công ty khởi nghiệp nhỏ mới thành lập để tham gia phỏng vấn. Dù quy mô công ty không lớn, nhưng đội ngũ nhân sự lại vô cùng ấn tượng. Hai người sáng lập đều là cử nhân Quản trị Kinh doanh của Học viện Công nghệ Massachusetts (MIT), và hiện đang đảm nhiệm chức vụ đồng CEO. Họ tự hào khoe rằng toàn bộ đội ngũ nhân viên từ quản lý vận hành, tài chính, marketing cho đến bán hàng đều được tuyển dụng từ các công ty lớn với mức lương cao ngất ngưởng. Ngoài ra, họ còn tiết lộ với Tiểu Bạch về sự xuất hiện của một cổ đông bí ẩn có quan hệ sâu sắc với chính phủ, mặc dù danh tính của người này vẫn chưa được tiết lộ công khai. Cậu bé cảm thấy hứng thú và quyết định tìm hiểu thêm về cơ hội việc làm tại nơi này.
Chúng tôi có nguồn vốn đầu tư mạo hiểm lên tới hàng triệu đô la Mỹsv 88, và đội ngũ cơ bản đã được sắp xếp. Hiện tại mọi thứ đều đã sẵn sàng, chỉ thiếu một lập trình viên nữa.
Hằng ngày tại trườngbxh ngoai hang anh, luôn đắm chìm trong những câu chuyện truyền cảm hứng về những người khởi nghiệp thành công, đặc biệt là những ai đã nhận được vốn đầu tư mạo hiểm. Đối với cậu ấy, họ không chỉ là tấm gương sáng mà còn là những nhân vật đáng ngưỡng mộ, khiến cậu luôn khao khát học hỏi và tìm hiểu thêm về con đường đầy thử thách nhưng cũng đầy thú vị này.
Các bạn định làm sản phẩm gì? hỏi.
Điều này liên quan đến sự sáng tạo của chúng tôiđánh bài online, vì vậy xin được giữ bí mật trong thời gian này. Tuy nhiên, tôi có thể nói với bạn rằng chúng tôi đang phát triển một sản phẩm tuyệt vời, một sản phẩm sẽ làm thay đổi toàn diện ngành công nghiệ Đây không chỉ là một bước tiến mà còn là một cuộc cách mạng thực sự, mang lại trải nghiệm hoàn toàn mới cho người dùng trên toàn thế giới. Hai CEO trả lời một cách bí ẩn.
Sau đósv 88, họ bổ sung thêm,
Chúng tôi dự định sẽ niêm yết trong vòng hai năm.
Nghe xongsv 88, không khỏi cảm thấy xúc động, sau đó liền gia nhập công ty này.
Công ty đã có một hệ thống website đang hoạt động ổn địnhbxh ngoai hang anh, và công việc hàng ngày của là bảo trì trang web này. Công việc không quá vất vả, thường ngày chỉ cần đọc code, kiểm tra và sửa lỗi nhỏ. Thỉnh thoảng, anh ấy cũng sẽ thêm vài tính năng đơn giản theo yêu cầu từ khách hàng hoặc đồng nghiệp, nhưng nhìn chung, công việc vẫn khá nhẹ nhàng và có nhiều thời gian để tìm hiểu thêm về các công nghệ mới.
Một ngày nọbxh ngoai hang anh, bất ngờ một trong những giám đốc điều hành lớn yêu cầu tổng hợp lại các số liệu của trang web, chẳng hạn như người dùng hoạt động hàng ngày (Daily Active Users), người dùng hoạt động hàng tuần (Weekly Active Users) và người dùng hoạt động hàng tháng (Monthly Active Users). Ông ấy nói rằng những con số này sẽ được trình bày trước các nhà đầu tư. Điều này khiến cảm thấy vô cùng áp lực nhưng cũng rất hào hứng vì đây là cơ hội để chứng minh khả năng của mình.
Sau khi suy nghĩ một chútbxh ngoai hang anh, cậu bé nhỏ nhận ra rằng tài liệu mà mình đang có trong tay chính là nhật ký truy cập (Access Log). Đây là loại tệp được tạo mỗi ngày, và mỗi dòng trong tệp này đều có định dạng như sau:
[Thời gian] [ID người dùng] [Tên hoạt động] [Các tham số khác...]
Giả sử bạn muốn thống kê số người dùng hoạt động hàng ngàyđánh bài online, bạn cần loại bỏ các dòng trùng lặp có cùng ID người dùng trong một tệp (mỗi tệp đại diện cho một ngày), sau đó số lượng dòng còn lại trong tệp chính là dữ liệu về số người dùng hoạt động hàng ngày. Đối với số người dùng hoạt động theo tuần hoặc theo tháng cũng tương tự như vậy, chỉ khác là thay vì xem xét trong một ngày, bạn sẽ thực hiện thao tác loại bỏ trùng lặp trong khoảng thời gian một tuần hoặc một tháng. Điều này giúp bạn dễ dàng xác định được số lượng người dùng độc nhất đã tương tác trong từng khoảng thời gian cụ thể.
Khi đósv 88, chỉ biết viết chương trình Java, vì vậy anh ấy viết một chương trình Java để thống kê:
Bạn có thể đọc từng dòng từ nội dung của một tệp tin đồng thời duy trì trong bộ nhớ một tập hợp HashSet để thực hiện việc kiểm tra trùng lặp. Mỗi khi đọc một dòngsv 88, bạn phân tích và trích xuất ID người dùng, sau đó kiểm tra xem ID này đã tồn tại trong tập hợp HashSet hay chưa. Nếu không tồn tại, bạn thêm ID vào tập hợp; nếu đã tồn tại, bạn bỏ qua dòng này và tiếp tục đọc dòng kế tiếp. Khi quá trình xử lý tệp tin kết thúc, số lượng phần tử trong tập hợp HashSet sẽ chính là dữ liệu về số người dùng hoạt động trong ngày tương ứng. Ngoài ra, trong quá trình xử lý, bạn cũng có thể ghi lại các hành động hoặc trạng thái của từng ID để dễ dàng theo dõi hơn. Điều này đặc biệt hữu ích khi bạn cần phân tích sâu hơn hoặc đối chiếu với các nguồn dữ liệu khác.
Tương tựsv 88, việc thống kê người dùng hoạt động hàng tuần và hàng tháng chỉ cần cho chương trình này đọc tệp tin của 7 ngày và 30 ngày rồi xử lý.
Từ đó về saubxh ngoai hang anh, hai vị giám đốc điều hành thường xuyên lui tới tìm để nhờ thống kê các loại dữ liệu. hiểu rằng, họ đang tham gia ngày càng nhiều vào các hội nghị và sự kiện trong giới đầu tư, có lẽ là muốn huy động thêm vốn cho công ty trong vòng gọi vốn thứ hai. Hai vị này dường như đã lên kế hoạch chi tiết cho những hoạt động kinh doanh sắp tới, và việc tìm đến không chỉ đơn thuần là để lấy số liệu mà còn để lắng nghe ý kiến chuyên môn từ anh. Mỗi khi tiếp nhận yêu cầu, đều cảm thấy áp lực nhưng cũng đầy hứng khởi, bởi anh biết mình đang đóng vai trò quan trọng trong việc định hình tương lai của công ty. Một buổi tối, khi hai vị CEO rời đi sau một cuộc họp kéo dài, ngồi lại với suy nghĩ: liệu mình có đủ khả năng để hỗ trợ họ đạt được mục tiêu này? Nhưng rồi, anh nhanh chóng gạt bỏ lo lắng, quyết tâm làm việc thật chăm chỉ để giúp công ty vượt qua thử thách.
Mỗi lần nhìn thấy dữ liệu sau khi xử lýsv 88, họ đều tỏ ra rất khó tin. Có phải đã có sai sót trong việc thống kê không? Liệu chúng ta chỉ có vậy thôi sao?
không thể trả lời.
Thời gian trôi qua nhanh chóngsv 88, một năm đã trôi đi. nhận ra rằng khoảng cách để công ty đạt được mục tiêu niêm yết trên thị trường chứng khoán vẫn không thay đổi so với cách đây một năm. Điều tồi tệ hơn là số tiền mà công ty từng huy động được trước đó giờ đã gần như cạn kiệt, và vòng gọi vốn thứ hai thì vẫn chưa có dấu hiệu khả quan. Thêm vào đó, lương tháng trước của anh ấy cũng bị chậm trả. Trước tình hình đó, anh quyết định từ bỏ công việc để tìm cơ hội mới. Cũng trong thời gian này, anh tự nhủ rằng cần phải có một bước ngoặt lớn để thay đổi cuộc sống. Anh dành thời gian để suy nghĩ về những gì mình thực sự muốn và lên kế hoạch cho tương lai. Mặc dù cảm thấy lo lắng về con đường phía trước, nhưng anh tin rằng việc dám chấp nhận rủi ro sẽ mở ra cánh cửa đến thành công mới.
Cho đến ngày nghỉ việcsv 88, dữ liệu hoạt động hàng ngày của công ty vẫn chưa vượt quá bốn chữ số.
Công việc thứ hai của là ở một công ty phát triển ứng dụng di động.
Giám đốc công nghệ của công ty nàysv 88, người thường được mọi người gọi là ông Vương, nổi tiếng với cách tuyển dụng thẳng thắn và quyết đoán. Trong một buổi phỏng vấn, khi nghe cậu bé khoe rằng mình từng làm việc với dữ liệu thống kê, ông Vương chẳng cần suy nghĩ nhiều đã quyết định nhận cậu vào làm luôn. Có lẽ ông Vương đã nhìn thấy tiềm năng trong mắt mà không cần quá nhiều lời giới thiệu.
Khi mới vào công tyđánh bài online, mới biết rằng CEO trước đây từng làm trong lĩnh vực tài chính và cực kỳ coi trọng dữ liệu. Mỗi ngày, ông ấy tự đặt ra hơn mười yêu cầu thống kê khác nhau về các loại dữ liệu lớn nhỏ. Không chỉ vậy, những yêu cầu này thường đòi hỏi sự chính xác cao và được phân tích sâu, khiến toàn bộ đội ngũ nhân viên phải làm việc hết sức căng thẳng để hoàn thành đúng hạn.
Xiao Bạch hàng ngày tất bật viết các chương trình thống kêsv 88, xử lý nhiều định dạng dữ liệu khác nhau, thường làm việc đến tận mười một hoặc mười hai giờ đêm. Thêm vào đó, điều khiến cậu ấy cảm thấy nản lòng hơn cả là rất nhiều yêu cầu thống kê chỉ mang tính chất một lần, và phần lớn các chương trình thống kê mà Xiao Bạch viết cũng chỉ được chạy duy nhất một lần rồi bị bỏ xó, chẳng bao giờ được sử dụng thêm nữa. Cậu ấy đã từng nghĩ rằng mình có thể cải tiến hoặc tái sử dụng những chương trình này trong tương lai, nhưng dần dần nhận ra rằng, việc xây dựng chúng thường khá phức tạp và không có thời gian để tối ưu hóa chúng sau khi hoàn thành nhiệm vụ. Dù vậy, Xiao Bạch vẫn kiên trì tiếp tục công việc, vì biết rằng mỗi chương trình dù chỉ được dùng một lần cũng góp phần quan trọng trong việc hoàn thành mục tiêu chung của dự án.
Một ngày nọbxh ngoai hang anh, anh ấy đang tất bật làm việc với việc tổng hợp số liệu. Bỗng nhiên ông Vương bước đến và nhận thấy anh ấy đang sử dụng ngôn ngữ lập trình Java, điều này khiến ông vô cùng ngạc nhiên. Sau khi cùng anh Tiểu Bạch phân tích kỹ lưỡng, ông Vương cho rằng phần lớn nhu cầu thống kê dữ liệu thực tế đều có thể thu thập từ nhật ký truy cập. Khi xử lý các tệp văn bản dạng nhật ký, sử dụng kịch bản Shell sẽ tiện lợi hơn rất nhiều.
Vì vậyđánh bài online, đã dành một khoảng thời gian để học lập trình Shell. Anh nhận ra rằng, việc sử dụng một số lệnh Shell để thống kê dữ liệu, chẳng hạn như người dùng hoạt động hàng ngày, trở nên vô cùng dễ dàng. Hãy lấy tập tin nhật ký truy cập của một ngày cụ thể có tên là access.log làm ví dụ, mỗi dòng trong tệp này có định dạng như sau:
[Thời gian] [ID người dùng] [Tên hoạt động] [Các tham số khác...]
Chỉ cần một lệnh duy nhất để thống kê hoạt động hàng ngày:
cat
access
.
log
|
awk
'
{
print
$
2
}
'
|
sort
|
uniq
|
wc
-
l
Lệnh này sử dụng awk để trích xuất cột thứ hai (tức là ID người dùng) từ tệp access.logsv 88, sau đó sắp xếp kết quả sao cho các ID người dùng trùng lặp nằm cạnh nhau. Tiếp theo, lệnh uniq được áp dụng để loại bỏ các dòng trùng lặp liền kề, từ đó thu được danh sách các ID người dùng độc lập. Cuối cùng, bằng cách sử dụng lệnh wc để đếm số lượng dòng, ta có thể xác định được số lượng người dùng hoạt động trong ngày.
Sau khi viết một số kịch bản Shellbxh ngoai hang anh, người mới bắt đầu dần nhận ra rằng, chỉ bằng cách sử dụng một số lệnh đơn giản, họ có thể thực hiện nhanh chóng các phép toán hợp, giao và hiệu trên tập dữ liệu file. Ngoài ra, họ còn khám phá thêm rằng việc kết hợp các công cụ mạnh mẽ như grep, awk hay sort sẽ giúp họ xử lý dữ liệu phức tạp một cách dễ dàng và hiệu quả hơn bao giờ hết.
Giả sử a và b là hai tệp tinbxh ngoai hang anh, mỗi dòng được coi như một phần tử dữ liệu, và mỗi dòng đều khác nhau.
Để tính hợp nhất của a và bsv 88, sử dụng lệnh sau đây:
cat
a
b
|
sort
|
uniq
>
a_b
.
union
Giao:
cat
a
b
|
sort
|
uniq
-
d
>
a_b
.
intersect
Tham số -d của lệnh uniq có nghĩa là: chỉ in ra các dòng lặp lại liền kề.
Việc tính hiệu của a và b phức tạp hơn một chút:
cat
a_b
.
union
b
|
sort
|
uniq
-
u
>
a_b
.
diff
Tại đâysv 88, chúng ta sử dụng kết quả của tập hợp hợp nhất từ a và b (a_b.union), sau đó sắp xếp nó cùng với b. Tiếp theo, bằng cách áp dụng lệnh uniq với tham số -u, các dòng không trùng lặp liên tiếp sẽ được hiển thị. Kết quả thu được chính là hiệu tập hợp của a và b.
nhận ra rằng nhiều phép thống kê dữ liệu có thể được thực hiện bằng cách sử dụng phép hợpđánh bài online, giao và hiệu của tập hợp.
Đầu tiênđánh bài online, bạn hãy xử lý các bản ghi truy cập hàng ngày, và từ đó sẽ tạo ra được một tập tin chứa danh sách các ID người dùng độc lập (mỗi dòng chỉ bao gồm một ID người dùng, không trùng lặp).
cat
access
.
log
|
awk
'
{
print
$
2
}
'
|
sort
|
uniq
>
access
.
log
.
uniq
Ví dụđánh bài online, để tính hoạt động hàng tuần, trước tiên hãy thu thập tập hợp người dùng độc lập trong 7 ngày:
Tìm hợp của 7 tập hợp để được hoạt động hàng tuần:
cat
access
.
log
.
uniq
.[
1
-
7
]
|
sort
|
uniq
|
wc
-
l
Tương tựsv 88, để tính hoạt động hàng tháng, hãy tìm hợp của 30 tập hợp người dùng độc lập.
Ví dụ khácsv 88, khi tính toán tỷ lệ giữ chân người dùng (Retention), việc sử dụng giao tập (intersection) là rất cần thiết. Trước tiên, từ tệp nhật ký của một ngày cụ thể, ta tách rời tập hợp những người dùng mới đăng ký và lấy nó làm nền tảng để tiến hành phân tích sâu hơn. Từ đây, chúng ta có thể bắt đầu xác định rõ hơn về xu hướng tương tác giữa các nhóm người dùng này với nền tảng trong những ngày tiếp theo.
Tỷ lệ người dùng đã thực hiện một hành động cụ thể trong khoảng thời gian nào đóđánh bài online, sau đó tiếp tục thực hiện một hành động khác vào N ngày sau đó
Sau khi nắm vững một số mẹo trong việc xử lý dữ liệu bằng Shell scriptsv 88, cậu học trò mới –– đã tiếp tục tìm hiểu sâu về lập trình với awk. Từ đó, việc thực hiện các nhiệm vụ thống kê dữ liệu trở nên dễ dàng và trơn tru hơn bao giờ hết đối với cậu. Trong khi đó, giám đốc điều hành (CEO) cùng đội ngũ sản phẩm của công ty cũng dành thời gian hàng ngày để phân tích cẩn thận những con số này. Dựa trên những thông tin thu thập được, họ đã đưa ra những điều chỉnh chiến lược cho sản phẩm và đạt được kết quả khả quan. Những nỗ lực không ngừng nghỉ này đã giúp công ty cải thiện đáng kể hiệu suất kinh doanh cũng như sự hài lòng của khách hàng.
không thể chạy tiếp
Để tăng tốc độ thực thi script thống kê dữ liệubxh ngoai hang anh, quyết tâm tìm ra một cách để script có thể chạy song song trên nhiều máy tính mà vẫn hoạt động mượt mà với bộ nhớ hạn chế. Sau khi suy nghĩ rất lâu, cậu ấy cuối cùng đã nghĩ ra một phương pháp đơn giản nhưng hiệu quả. Cậu nhận ra rằng, thay vì chạy toàn bộ dữ liệu trên một máy, có thể chia nhỏ tập dữ liệu thành các phần nhỏ hơn và phân bổ chúng lên từng máy riêng lẻ. Điều này không chỉ giúp giảm tải cho mỗi thiết bị mà còn tận dụng được sức mạnh của nhiều hệ thống cùng một lúc. Dù cách làm này nghe có vẻ phức tạp, nhưng với sự kiên trì và kỹ năng lập trình tốt của mình, tin rằng cậu có thể triển khai ý tưởng này một cách hiệu quả.
Vẫn lấy ví dụ về việc tính toán người dùng hoạt động hàng ngày. Đầu tiênbxh ngoai hang anh, anh ta sẽ quét toàn bộ tập tin nhật ký của một ngày theo thứ tự từ đầu đến cuối để thu thập thông tin, và từ đó tạo ra 10 tập tin chứa ID người dùng. Khi gặp mỗi ID người dùng trong tập tin nhật ký, anh ấy sẽ tính toán giá trị băm (hash) của ID đó để xác định nên ghi nó vào tập tin nào trong số 10 tập tin đã được phân chia trước đó. Do quá trình này thực hiện tuần tự và không cần xử lý song song, lượng bộ nhớ cần thiết cho bước này là khá nhỏ, và tốc độ cũng rất nhanh chóng. Điều này giúp tối ưu hóa thời gian và tài nguyên hệ thống mà vẫn đảm bảo hiệu quả công việc.
Sau đóđánh bài online, anh ta sao chép 10 tệp dữ liệu mà mình vừa nhận được lên nhiều máy tính khác nhau, tiến hành sắp xếp và loại bỏ các mục trùng lặp trên mỗi máy. Đồng thời, anh cũng tính toán số lượng người dùng độc lập cho từng tệp. Do không có sự giao thoa nào giữa các ID người dùng trong 10 tệp này, việc cộng tổng lại 10 con số người dùng độc lập đã thu được sẽ cho ra kết quả chính xác về số liệu hoạt động hàng ngày của hệ thống vào ngày hôm đó.
Dựa vào phương pháp nàysv 88, đã giảm quy mô dữ liệu cần xử lý xuống chỉ còn 1/10 so với ban đầu. Anh nhận ra rằng, bất kể tệp dữ liệu gốc có lớn đến đâu, chỉ cần trong bước đầu tiên quét và xử lý tệp, anh chọn số lượng tệp được chia nhỏ nhiều hơn một chút, vấn đề thống kê sẽ luôn được giải quyết. Tuy nhiên, anh cũng nhận thấy một số nhược điểm của cách làm này: Đầu tiên, việc phân chia quá nhiều tệp có thể dẫn đến sự phức tạp trong quản lý và theo dõi, khiến công việc trở nên rườm rà hơn. Hơn nữa, mỗi tệp con sau khi được chia nhỏ cần phải được xử lý riêng biệt, điều này tiêu tốn thêm thời gian và tài nguyên máy tính. Thứ hai, nếu không cẩn thận trong việc thiết lập các thông số chia tệp, khả năng cao là một số dữ liệu quan trọng có thể bị mất hoặc không được xử lý đúng cách. Cuối cùng, phương pháp này đòi hỏi người dùng phải có kiến thức kỹ thuật tốt để điều chỉnh các tham số phù hợp, điều này không phải ai cũng dễ dàng thực hiện. Dù vậy, với sự kiên nhẫn và kỹ năng của mình, vẫn tiếp tục cải thiện cách tiếp cận này để đạt được kết quả tối ưu nhất.
Đặc biệt là vấn đề cuối cùng nàybxh ngoai hang anh, khiến cảm thấy rất đau đầu. Dường như mỗi lần thực hiện thống kê đều có vẻ giống nhau, nhưng kỳ thực lại không hoàn toàn lặp đi lặp lại. Ví dụ như, dựa trên nguyên tắc nào để tách file? Phải chia thành bao nhiêu phần? Sau khi tách file dữ liệu ra, cách xử lý các tập tin đó như thế nào? Những máy tính nào đang rảnh để có thể chạy quy trình xử lý? Tất cả những điều này đều phụ thuộc vào yêu cầu cụ thể của việc thống kê và quy trình tính toán. Mỗi lần thực hiện đều cần phải xem xét kỹ càng từng khía cạnh, bởi vì ngay cả những chi tiết nhỏ nhất cũng có thể ảnh hưởng đến kết quả cuối cùng.
Toàn bộ quy trình này không thể tự động hóa hoàn toàn. Mặc dù đã tuyển được hai thực tập sinh để chia sẻ khối lượng công việc của mìnhbxh ngoai hang anh, nhưng khi đối mặt với những vấn đề thống kê có khối lượng dữ liệu lớn như vậy, anh ấy vẫn cảm thấy không an tâm để giao cho họ xử lý. Thậm chí, mỗi khi kiểm tra lại kết quả, anh vẫn phải mất thêm nhiều thời gian để rà soát kỹ càng từng bước, bởi vì tính chính xác trong trường hợp này quá quan trọng đối với dự án.
Vì vậysv 88, bắt đầu suy ngẫm về cách để tạo ra một khung năng lực tính toán dữ liệu chung, cho phép bất kỳ ai biết viết script cũng có thể dễ dàng chạy script của mình theo cách phân tán. Cậu tự hỏi liệu có thể xây dựng một hệ thống linh hoạt mà ngay cả người mới bắt đầu cũng có thể sử dụng một cách hiệu quả? Điều đó không chỉ giúp tiết kiệm thời gian mà còn tối ưu hóa khả năng xử lý dữ liệu khổng lồ. Nhưng để làm được điều đó, cậu cần tìm hiểu thêm về các công nghệ hiện đại và lắng nghe ý kiến từ những người có kinh nghiệm trong lĩnh vực này.
Suốt ba năm trờiđánh bài online, anh ấy đã không ngừng suy ngẫm về vấn đề này. Trong suốt khoảng thời gian đó, anh cảm nhận được mình đang ở rất gần với bản chất thật sự của vấn đề, nhưng mỗi lần tưởng chừng như sắp hiểu rõ thì lại vấp phải một rào cản mà không thể vượt qua. Có những lúc, anh tự nhủ rằng chỉ cần thêm chút kiên nhẫn và nỗ lực nữa là có thể thấu hiểu hoàn toàn, nhưng thực tế thì mọi thứ vẫn luôn nằm ngoài tầm tay, như một bức màn mỏng manh mà anh chưa thể chạm tới.
Trong khi đóđánh bài online, sự phát triển kinh doanh của công ty cũng bước vào giai đoạn bế tắc. dần nhận ra rằng, việc cải thiện từng chút một trên nền tảng hiện tại có thể mang lại một mức độ tăng trưởng nhất định, nhưng về lâu dài sẽ không thể tạo nên những đột phá lớn về giá trị. Điều này giống như vấn đề mà cậu đang suy ngẫm, cậu cần thay đổi góc nhìn để đánh giá lại mọi thứ từ đầu. Cậu bắt đầu tự hỏi liệu có cách nào khác để vượt qua giới hạn này không? Có lẽ cậu nên tìm kiếm những cơ hội mới thay vì chỉ tập trung vào những điều nhỏ nhặt. Cậu nhận thấy rằng, trong thời đại hiện nay, các công ty thành công không ngừng đổi mới và sáng tạo, họ luôn tìm cách mở rộng phạm vi hoạt động và khám phá những thị trường tiềm năng mới. Cậu quyết định dành thời gian nghiên cứu thị trường và đối thủ cạnh tranh kỹ lưỡng hơn. Cậu tin rằng nếu có thể hiểu rõ nhu cầu của khách hàng và xu hướng phát triển của ngành, cậu sẽ tìm được con đường mới dẫn đến thành công. Đây là lúc cần phải dũng cảm rời khỏi vùng an toàn và sẵn sàng đối mặt với thử thách phía trước.
Vào thời điểm đósv 88, một công ty internet khác đang trong giai đoạn tăng trưởng mạnh mẽ đã bày tỏ ý định mời anh ấy về làm việc. Sau khi cân nhắc kỹ lưỡng, anh ấy quyết định chọn một thời điểm phù hợp để nộp đơn xin từ chức, khép lại quãng thời gian làm việc thứ hai của mình. Điều khiến anh ấy tự hào không chỉ là sự nghiệp thăng tiến mà còn là việc luôn biết lắng nghe tiếng gọi của bản thân trước những cơ hội mới đầy tiềm năng.
Sau khi gia nhập công ty mớisv 88, Xiao Bai được phân vào nhóm kiến trúc dữ liệu. Nhiệm vụ của anh ấy chính là điều mà anh luôn mong muốn thực hiện: thiết kế một khung làm việc tính toán dữ liệu phân tán phổ quát. Lần này, anh phải đối mặt với khối lượng dữ liệu khổng lồ lên đến vài terabyte (TB). Tuy nhiên, Xiao Bai không hề nản lòng; thay vào đó, anh cảm thấy phấn khích trước thử thách mới đầy thú vị này. Anh biết rằng đây sẽ là cơ hội để chứng tỏ khả năng và đưa ý tưởng của mình vào thực tiễn. Với niềm đam mê cháy bỏng và sự kiên nhẫn đáng kinh ngạc, Xiao Bai bắt đầu nghiên cứu và tìm ra cách tối ưu hóa hệ thống sao cho hiệu quả nhất trong việc xử lý dữ liệu lớn.
Sau khi tiến hành nghiên cứu chi tiết nhiều lần và tự học vô số kiến thứcsv 88, cậu bé nhỏ bé cuối cùng đã tìm thấy nguồn cảm hứng từ các nguyên thủy map và reduce của ngôn ngữ lập trình Lisp cũng như một số ngôn ngữ lập trình hàm khác. Từ đó, cậu đã tái cấu trúc toàn bộ quy trình xử lý dữ liệu, như được minh họa trong hình bên dưới:
Quá trình xử lý dữ liệu ở trênđánh bài online, thông thường người dùng chỉ cần tập trung vào hai giai đoạn chính là Map (3) và Reduce (5), nghĩa là tái viết lại Mapper và Reducer. Chính vì vậy, người mới bắt đầu (gọi là trong tiếng Trung) đã đặt tên cho hệ thống xử lý dữ liệu này là Hai bước cơ bản này đóng vai trò quan trọng trong việc phân tích và tổng hợp dữ liệu, giúp tối ưu hóa hiệu suất làm việc của hệ thống. Người dùng không cần phải lo lắng về các khía cạnh phức tạp khác, mà chỉ cần tập trung vào việc tùy chỉnh hai phần Map và Reduce để đáp ứng nhu cầu cụ thể của mình. Nhờ đó, MapReduce trở thành một công cụ mạnh mẽ và dễ sử dụng trong lĩnh vực xử lý dữ liệu hàng loạt.
Cũng lấy ví dụ về việc thống kê hoạt động hàng ngàybxh ngoai hang anh, người dùng cần viết lại mã Mapper và Reducer như sau:
public
class
MyMapper
extends
Mapper
<
Object
,
Text
,
Text
,
Text
>
{
private
final
static
Text
empty
=
new
Text
(
""
);
private
Text
userId
=
new
Text
();
public
void
map
(
Object
key
,
Text
value
,
Context
context
)
throws
IOException
,
InterruptedException
{
// định dạng value: [thời gian] [ID người dùng] [tên hoạt động] [các tham số khác...]
StringTokenizer
itr
=
new
StringTokenizer
(
value
.
toString
());
// bỏ qua trường đầu tiên
if
(
itr
.
hasMoreTokens
())
itr
.
nextToken
();
if
(
itr
.
hasMoreTokens
())
{
// tìm trường ID người dùng
userId
.
set
(
itr
.
nextToken
());
// xuất ID người dùng
context
.
write
(
userId
,
empty
);
}
}
}
public
class
MyReducer
extends
Reducer
<
Text
,
Text
,
Text
,
Text
>
{
private
final
static
Text
empty
=
new
Text
(
""
);
public
void
reduce
(
Text
key
,
Iterable
<
Text
>
values
,
Context
context
)
throws
IOException
,
InterruptedException
{
// key chính là ID người dùng
// loại bỏ các ID người dùng trùng lặpđánh bài online, chỉ xuất một
context
.
write
(
key
,
empty
);
}
}
Giả sử đã cấu hình
r
reducersv 88, sau khi chạy mã trên, sẽ nhận được
r
Tập tin đầu ra được tạo thành từ nhiều tệp consv 88, mỗi tệp chứa danh sách các ID người dùng duy nhất mà không trùng lặp giữa các tệp. Hơn nữa, giữa các tệp này không có sự chồng chéo nào về dữ liệu. Do đó, những tệp đầu ra này đã ghi lại đầy đủ tất cả người dùng hoạt động trong ngày. Tổng số dòng của tất cả các tệp sẽ chính là tổng số người dùng hoạt động hằng ngày.
Sau khi phát minh ra khái niệm MapReduceđánh bài online, nhận ra rằng đây là một hình thức trừu tượng rất hiệu quả. Nó không chỉ giúp xử lý những công việc thống kê dữ liệu thường ngày mà còn có thể áp dụng vào nhiều lĩnh vực khác nhau. Dưới đây là một số ví dụ: Ví dụ đầu tiên, MapReduce có thể được sử dụng để phân tích dữ liệu lớn trong thời gian thực, chẳng hạn như theo dõi hành vi người dùng trên các nền tảng trực tuyến. Điều này cho phép các doanh nghiệp hiểu rõ hơn về thói quen mua sắm và sở thích của khách hàng. Thứ hai, nó cũng có thể giúp cải thiện hiệu suất trong các hệ thống máy tính đám mây. Bằng cách chia nhỏ dữ liệu thành các phần nhỏ hơn và xử lý từng phần độc lập, hệ thống có thể tận dụng tối đa tài nguyên phần cứng và giảm thời gian thực thi. Cuối cùng, MapReduce còn có thể được ứng dụng trong lĩnh vực khoa học dữ liệu. Với khả năng xử lý khối lượng thông tin khổng lồ, nó giúp các nhà nghiên cứu khám phá ra các mô hình ẩn sâu bên trong dữ liệu, từ đó đưa ra các dự đoán chính xác hơn về tương lai. Tóm lại, MapReduce không chỉ đơn thuần là một công cụ để xử lý dữ liệu mà còn là một giải pháp toàn diện cho nhiều vấn đề phức tạp trong thời đại công nghệ hiện nay.
Giải thích ngoài câu chuyện :
Ban đầusv 88, cần lưu ý rằng các tình tiết trong bài viết này hoàn toàn là sản phẩm tưởng tượng, nhưng những công nghệ và cách tiếp cận được đề cập đều dựa trên thực tế. Bài viết đang cố gắng xây dựng một cốt truyện xuyên suốt để minh họa cho ý tưởng thiết kế của phân tích số liệu cũng như MapReduce, trọng tâm đặt vào sự mạch lạc trong tư duy thay vì đi sâu vào từng chi tiết kỹ thuật. Do đó, có rất nhiều khía cạnh quan trọng trong công nghệ mà bài viết không đề cập đến, nhưng người đọc cần chú ý tới vấn đề này. Ví dụ:
(Kết thúc)
Các bài viết được chọn lọc khác :