정규표현식 검사에서 10MB 문자 데이터를 검사한다고 했을때, 성능을 높이는 방법은?

trymp의 이미지


환경은 fedora linux 64bit 이고요.

10MB 정도 되는 문자 데이터에서 필요로 하는 정규표현식을 검출하고자 합니다.

10MB 사이즈가 커서 이것은 512kB 로 20개 만들어서 검사하는게 나을까요?

아니면 통짜로 10MB 를 할당받아서 검사하는게 빠를까요?

성능상 어떤게 더 나은지 좀 알려주세요.

고수님들의 조언 부탁드립니다.

qiiiiiiiip의 이미지

요즘 컴퓨팅 환경에서 10MB 는 문제가 될 만한 크기가 아닐것 같은데요..

엄청 느린 환경이라든가, 엄청 많은 파일이라든가, 엄청 복잡한 패턴 같은 특수한 환경에서나 문제가 될 것 같습니다.

지금 환경에서 시간이 얼마 걸리는데, 얼마로 줄이는게 목표다라는 것이 정해져야 앞으로의 방향이 나올 것 같습니다.

익명 사용자의 이미지

나누면 병렬처리가 가능해집니다
프로세스하나로 10mb 처리하는것보다
20개의 프로세스로 각각 512kb 동시에 처리하는것이 빠를수있습니다

익명 사용자의 이미지

프로세스 20개 띄우느라 걸리는 시간, (아마도 디스크에 있을) 10MB짜리 파일을 프로세스 20개가 랜덤 액세스하겠다고 난리피우는 시간 등을 고려하면 과연 어떨까요.
설령 이득이 있다고 해도 몇백 밀리세컨드를 넘지 않을텐데 그거 얻겠다고 프로세스 20개 실행시키는 배치 스크립트 만드는 데 걸리는 시간은...?

직접 해보고 초시계로 재 봐야 아는 일이라지만, 제 생각에는 영 남는 장사가 못 될 거 같네요. 과연 초시계로 잴 수 있을 만큼 시간 차이가 날지도 잘 모르겠고요.

익명 사용자의 이미지

어짜피 단 한개의 10mb짜리 파일 한개를 어떻게 처리할것인가를
고민할것이면 게시판에 이런글을 올리는것자체가 무의미하겠죠

반복적으로 10mb파일을 지속적으로 처리해야하는 상황이면
당연히 프로세스를계속 실행시켜놓고 입력을 받아처리를 하게해야합니다 이건 10mb파일을 한번에처리하더라도 마친가지입니다

원글 어디에도 쉘스크립트로 작성할것이라는 얘기는 없습니다
잘 읽어보고 댓글답시다

jick의 이미지

512KB로 나눴을 때 딱 나누는 지점에 정규식이 걸리면 어떻게 처리하실 건가요?

백연구원의 이미지

일단 질문과 무관한 답글이지만, 이게 댓글 논란의 정답이네요.
정규식을 처리 하기 위해 문자 데이터를 자른다는 것은 사실상 불가능한 답입니다.


소곤소곤

익명 사용자의 이미지

이론적으로는 그렇습니다만 현실적으로는 자를수있습니다
가령 단어나 라인단위의 정규식을 표현한다면
정확히 512kb는 아니더라도 최대한 근접하게 자를수있습니다

qiiiiiiiip의 이미지

(효용성에 대해서 상당히 회의적이긴 하지만...) 그래도 잘라서 하겠다고 결정했다면,

경계 부분의 문제는
라인단위가 아닌 경우라 하더라도,
해당 패턴이 matching하는 최대 길이만큼
overlap을 둠으로써 쉽게 해결할 수 있습니다.

물론 최대길이가 예측불가하다면 사용할 수 없겠지만요.

익명 사용자의 이미지

환경은 fedora linux 64bit 이고요.
 
10MB 정도 되는 문자 데이터에서 필요로 하는 정규표현식을 검출하고자 합니다.
 
10MB 사이즈가 커서 이것은 512kB 로 20개 만들어서 검사하는게 나을까요?
 
아니면 통짜로 10MB 를 할당받아서 검사하는게 빠를까요?
 
성능상 어떤게 더 나은지 좀 알려주세요.
 
고수님들의 조언 부탁드립니다.

같은 말 반복이지만, 일단 10MB 데이터를 전체에 대해서 작업한 후 성능개선이 필요한지 판단해 보시기 바랍니다.
병렬처리가 필요하더라도 나누는 개수는 CPU 수에 의존적입니다. 딱 CPU 개수 또는 그보다 약간 많은 정도면 됩니다.

나누는 방법은 데이터의 형태나 하려는 작업의 형태에 대한 정보가 없는 한, 대답하기 애매합니다.
일단 단일처리로 구현한 후 필요하다면, 그 구현물을 가지고 질문해 보시기 바랍니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.