thảo luận Thuật toán tìm kiếm tối ưu cho mảng dữ liệu lớn - JS

kai_nk

Senior Member
Chào các bác, hiện tại em đang tìm kiếm theo tên của từng địa chỉ để lấy ra lat long, nhưng vấn đề là mảng dữ liệu em khá lớn ( ~ 3m dòng :beat_shot: ). Có giải thuật nào tối ưu để xử lí mảng này không các bác ? :adore:

Screen Shot 2020-10-11 at 12.30.58.png


P/s : thật ra em đang ngịch cái openweathermap, nó có cho 1 list các địa điểm ( gồm id, name , coordinate, ..) nên em muốn xem có cách nào để dùng file này luôn mà không cần một api nào để lấy coordinate :byebye:
 
Last edited:
dữ liệu dạng file hay ở trong db, server chạy node hở, hiện tại nó đang chậm hay chạy tốn tài nguyên. Mô tả gì chơi chơi vậy ...
 
Thật ra cái 3m dòng gì đó không phải là vấn đề chính tôi muốn nói (mặc dù nó cũng shit đó)
cVL81H2.gif

Cái tôi muốn nói là cậu thread iterate qua cái mảng 3m phần tử để tìm mà bất kì thằng sv nào học qua ds&algo cũng biết phải làm gì
hB8nmx5.png
 
nói như anh thì mấy cái editor nó không cần phải đọc file hàng triệu dòng nữa hả.

Anh cố cãi làm gì, thuật toán tìm kiếm trên mảng dữ liệu lớn thì có đầy từ bao lâu rồi. Người ta làm database, editor có đầy rồi. Không cần anh phải phát minh lại cái bánh xe.

Quan trọng là vấn đề chủ thớt hỏi thì tôi thấy anh đi phát minh lại cái bánh xe là không đúng hướng. Giờ anh bảo người ta implement 1 cái full text search vốn là cái feature cơ bản của database?
 
Thật ra cái 3m dòng gì đó không phải là vấn đề chính tôi muốn nói (mặc dù nó cũng shit đó)
cVL81H2.gif

Cái tôi muốn nói là cậu thread iterate qua cái mảng 3m phần tử để tìm mà bất kì thằng sv nào học qua ds&algo cũng biết phải làm gì
hB8nmx5.png
anh biết câu chuyện "lợn cưới áo mới" không? comment của anh chẳng có giá trị gì mà chỉ để thể hiện anh biết cách giải.
 
Anh cố cãi làm gì, thuật toán tìm kiếm trên mảng dữ liệu lớn thì có đầy từ bao lâu rồi. Người ta làm database, editor có đầy rồi. Không cần anh phải phát minh lại cái bánh xe.

Quan trọng là vấn đề chủ thớt hỏi thì tôi thấy anh đi phát minh lại cái bánh xe là không đúng hướng. Giờ anh bảo người ta implement 1 cái full text search vốn là cái feature cơ bản của database?
trong phạm vi của thớt này, tôi bảo là viết 1 cái FTS đơn giản đủ để đáp đứng bài toán đó. nó không phải là phát minh lại cái bánh xe hay gì cả.

còn ngoài kia người ta vẫn liên tục phát minh lại bánh xe. anh nên bớt làm crud lại đi.
 
comment của anh chẳng có giá trị gì mà chỉ để thể hiện anh biết cách giải.
Ơ, sao lại không, tôi đang shaming cái thể loại đến basic cs cũng không biết mà đã lao đầu vào webshit, cậu trong bài gọi đó là "thuật toán", "giải thuật" nhưng cái ds cơ bản cũng không biết. Tôi đếch thích khoe chỉ thích chửi thôi, có vấn đề gì không hả cậu
9ZCJReH.png
 
Ơ, sao lại không, tôi đang shaming cái thể loại đến basic cs cũng không biết mà đã lao đầu vào webshit, cậu trong bài gọi đó là "thuật toán", "giải thuật" nhưng cái ds cơ bản cũng không biết. Tôi đếch thích khoe chỉ thích chửi thôi, có vấn đề gì không hả cậu
9ZCJReH.png
basic cs là phải insert vào db rồi đánh index rồi query đúng không?
 
trong phạm vi của thớt này, tôi bảo là viết 1 cái FTS đơn giản đủ để đáp đứng bài toán đó. nó không phải là phát minh lại cái bánh xe hay gì cả.

còn ngoài kia người ta vẫn liên tục phát minh lại bánh xe. anh nên bớt làm crud lại đi.

Nói thật tôi thấy các anh cứ thích đao to búa lớn, giải thuật các kiểu trong khi design thì như shit, lúc đó thuật trời cũng ko cứu được đấy.

À còn vụ anh bảo tôi bớt làm CRUD là a chụp mũ nhé. Nói luôn, tôi làm về Data Analysis và Machine Learning chứ éo phải CRUD, và tôi biết trình của tôi cũng chẳng pro gì nên ko dám gáy về giải thuật như anh. Chém gió với các a bên kia là do thấy mấy a cuồng FP quá thôi.

Lượn :go:
 
Cho mình hỏi là contex ở đây là gì nhỉ, bạn dùng read 1 file text json trong đó có 3 triệu record, hay là bạn request sang 1 web api nào đó, và api đó trả về 3 triệu record, nội dung có thể thay đổi trong các lần gọi khác nhau, rồi bạn muốn filter bằng "name" à. Ý câu hỏi này của mình là bạn cái 3 triệu row của bạn là data bạn chủ động (trường hợp 1) hay bị động (trường hợp 2)

Nếu mà trường hợp 1 thì có lẽ là thay vì để trong file text, có lẽ bạn nên lưu trong sql database hoặc gì đó, có index để seek, index-key look up đêt giảm io, hoặc tự động parallel nếu phải scan (ví dụ khi search bằng pattern bất thường), 1 số sẽ hỗ trợ cả full text search (sql server)

Còn trường hợp 2 thì trước khi xem thuật toán xử lý, bạn kiểm tra xem nó có chậm ở bước get data hoặc de serialize k (3 triệu row với data thế kia có khi cũng phải mấy chục megabyte, down qua network có khi cũng phải chục giây, chưa kể cost deserialize) . Còn nếu mà chậm thực sự là do arr thì mình nghĩ sẽ chẳng có cách nào khác ngoại trừ duyệt từ đầu mảng đến cuối mảng đâu, để tăng tốc cái này nếu là đám như c# thì mình sẽ nghĩ đến thư viện parallel for each, nhưng k rõ javascript web worker thì thế nào...
 
Last edited:
basic cs là phải insert vào db rồi đánh index rồi query đúng không?
không, bởi vì tính chất đặc biệt của tiếng việt mà để search cho tử tế thì phải dùng thư viện/service có feature riêng biệt, cho nên tôi đoán các bạn trên sẽ suggest dùng elastic search :))

nhân tiện thì tôi hiện tại gặp vấn đề tương tự, dữ liệu build từ nhiều nguồn + phải sửa sai cho nên cũng ném vào một đống flatfile chứ cũng không thèm nhét vào db. như tôi làm thì lưu mỗi entry vào một file, sau đó thì build một file index riêng để map keywords tới các entries.

OP nên học cách "chuẩn bị dữ liệu", nhiều thứ không phải cứ đập vào là xử lý luôn, hãy nghĩ các phương án workaround sao cho tối ưu hơn.
 
Back
Top