ipc 선택의 문제

seeker의 이미지

한 프로세스가
struct {
char name[20];
int age;
} 와 같은 간단한 구조체 데이터를 IPC형태(fifo,msg Q,shared memory...)에 써줍니다.

또 한 프로세스는 그것을 꺼내읽어서 비즈로직을 처리하면됩니다.

대략 저와같은 간단한 구조체데이터가 순간적으로 100만건 정도 발생하는데요.
이와 같을때 적당한 ipc는? ( 데이터는 간헐적으로 생성되고요, 발생되는 건수는 가변적임 . 평상시 발생할때마다 100건미만일수있으나 새벽에 최고 100만건이 발생함.)

제생각에는 message que로 하면 딱일것같은데 용량문제가 걸리네요.
max 100만건정도의 수용할수 있는게 뭐가좋을까요?

그리고 맥스 100만건이 중복된 데이터일경우 구조체를 생성해주는 프로세스가
중복되지 않게 기존데이터를 검색할수 있는 ipc가 있을까요? (-> 이것은 필수조건은 아니고, 가능하면 좋음)

choissi의 이미지

데이터의 사이즈나 건수로 봐서는 ipc계열 보다는,
파일 기반이 더 좋을꺼 같군요...

또, 그냥 파일 보다는, 중복을 체크 해야 하는 것도 있으니..
cisam이나 index가 지원되는 것을 사용하면 충분히
빠를듯 합니다.

업무 프로세스에게는 시그널이나,
udp로 할일이 있음을 알려주어도
될듯 하구요..

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

juami의 이미지

메모리가 만땅 충분한 경우에는
shared memory + semaphore
가 가장 빠를겁니다.

sunyzero의 이미지

윗분 말씀대로 cisam 을 사용하시거나(c-isam은 속도는 무지 빠릅니다. 다만 옛날꺼라서 조금 호환에서 떨어집니다. 만일 쓰레드를 쓰신다면 d-isam을 쓰셔야 합니다) 메모리가 많고, 휘발적인 성격이 강하다면 memory db를 쓰시면 됩니다.

========================================
* The truth will set you free.

seeker의 이미지

개인적으로 고민해봤는데요.

파일에 레코드LOCKing을 이용할까싶었는데요.
메모리 db는 어떤건지요?
첨듣는지라...

smalljam의 이미지

:wink:
www.sleepycat.com
화일 base의 db입니다.api도 제공됩니다.
게다가 한쌍으로 들어가는 값일 경우라면 더욱 좋습니다.

In the UNIX,
화일 시스템은 지평적인 공간 감각을 제공하며 ,
프로세스는 생명을 갖는 생명체와 같아보인다.
--BACH

frowt의 이미지

제생각도 filedb 를 사용하는것이 좋은 생각인것 같은데요
굳이 ipc를 쓰시겠다면
Shared Memory 는 글 올리신 분의 의도와는 조금 벗어난것 같고,
Message Queue 가 답이 될것 같은데, 용량이 문제라면,
/etc/sysctl.conf 파일에
kernel.msgmnb = 100000000(원하는 만큼, 단 realmemory 보다 작게)
추가 하시고 sysctl -p 하시면 됩니다.
혹은 커널소스중에서 ipc.h 파일에 뭐였는지 기억이 나지 않지만
define 된 것을 고쳐서 커널컴팔 해서 쓰시면 됩니다.

버그소년의 이미지

Quote:
메모리 db는 어떤건지요?
첨듣는지라...

Main Memory DataBase라구 하구요..

줄여서 MMDB라고 합니다.

대부분의 DB는 디스크 기반이고, 디스크기반에 최적화된 검색인덱스를

가지고 있습니다.

단순히 모든데이터를 메모리에 올려서 구동시키는것 뿐 아니라

메모리기반에서 최적화된 검색알고리즘을 가지고있습니다.

(자세한건 저도 잘 모르지만.. T-tree라구 하던가 머.. 이런저런게 있다더군요 )
국내에도 서너군데 업체에서 제품이 나왔을겁니다.

가끔은 밥을 굶어도 살 수 있다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.