현재 버전

파일수정하는 방법이 있을까요


앞으로 국비지원용 채팅프로그램에도 파일 읽고쓰기가 필요하고..

개인적으로 안드로이드 재미난거 해볼때도 파일읽고쓰기가 필요해서..


아예 직접 텍스트파일에 sql문 보내면 그에맞게 처리가 되게

Connection, PreparedStatement클래스 만들고,


제가만든 ThreadUtils클래스로 성능테스트를 해봤는대요, 문제가 생겼어요.


아래의 예제는 약 1만개의 글을 쓰는데 걸린 시간을 재는 테스트코드이구요,

	public static void main(String[] args) throws IOException
	{
		Connection conn = Connection.getConnection("myuser", "1234");
		PreparedStatement pstmt = conn.prepareStatement("insert into sample(code, name) values(?, ?)");
		
		Runnable runnable = new Runnable() 
		{
			@Override
			public void run() 
			{
				for(int i = 0 ; i <= 10000 ; i++)
				{
					int result;
					try {
						pstmt.setInt(1, i);
						pstmt.setString(2, "name" + i);
						result = pstmt.executeUpdate();
						
					} catch (IOException e) 
					{
						e.printStackTrace();
					}
				}
			}
		};
		System.out.println(ThreadUtils.getRunningTime(runnable));
	}


걸린 시간이에요. (114초) (i7-7세대 120마넌 게이밍노트북, win10환경)

그 빠르다던 BufferedWriter로 써도 이모양이에요.


파일 수정하는법 찾아봤는데, 아무리 찾아봐도

"기존 파일 복사본 하나 떠서, 특정부분만 새로 쓰던가 수정해라" 이 이야기더라구요...


그럼 insert, select할때는 문제가 없겠지만

delete, update로 특정 행을 수정하거나 삭제할때,

고작 1 row 수정하겠다고 저런 시간을 들이기엔 조금 그런거같아요.


질문)

정말 파일의 특정 row를 수정하거나 삭제하는 방법은,

복사본 뜨는 방법 밖에 없는건가요?


일단 제 짧은 지식으로는 특정 행 수정하는법이 안떠오르고..

찾아봐도 안보이네요.


최대한 성능 보장하면서 부족한 머리를 굴려본다면...


수정할 내용 몇줄만 따로 보관 후 성공 루틴 타게하기.

(호출한 쓰래드가, 복사본 저 커다란거 다 뜰때까지 딴일을 못한다는건 좀 그래요)


이거땜에 발생할 기타 side effect를

제 수준에서 최대한 해결중이에요.


수정 이력

2019-04-01 16:46:00 에 아래 내용에서 변경 됨 #3

앞으로 국비지원용 채팅프로그램에도 파일 읽고쓰기가 필요하고..

개인적으로 안드로이드 재미난거 해볼때도 파일읽고쓰기가 필요해서..


아예 직접 텍스트파일에 sql문 보내면 그에맞게 처리가 되게

Connection, PreparedStatement클래스 만들고,


제가만든 ThreadUtils클래스로 성능테스트를 해봤는대요, 문제가 생겼어요.


아래의 예제는 약 1만개의 글을 쓰는데 걸린 시간을 재는 테스트코드이구요,

	public static void main(String[] args) throws IOException
	{
		Connection conn = Connection.getConnection("myuser", "1234");
		PreparedStatement pstmt = conn.prepareStatement("insert into sample(code, name) values(?, ?)");
		
		Runnable runnable = new Runnable() 
		{
			@Override
			public void run() 
			{
				for(int i = 0 ; i <= 10000 ; i++)
				{
					int result;
					try {
						pstmt.setInt(1, i);
						pstmt.setString(2, "name" + i);
						result = pstmt.executeUpdate();
						
					} catch (IOException e) 
					{
						e.printStackTrace();
					}
				}
			}
		};
		System.out.println(ThreadUtils.getRunningTime(runnable));
	}


걸린 시간이에요. (114초) (i7-7세대 120마넌 게이밍노트북, win10환경)

그 빠르다던 BufferedWriter로 써도 이모양이에요.


파일 수정하는법 찾아봤는데, 아무리 찾아봐도

"기존 파일 복사본 하나 떠서, 특정부분만 새로 쓰던가 수정해라" 이 이야기더라구요...


그럼 insert, select할때는 문제가 없겠지만

delete, update로 특정 행을 수정하거나 삭제할때,

고작 1 row 수정하겠다고 저런 시간을 들이기엔 조금 그런거같아요.


질문)

정말 파일의 특정 row를 수정하거나 삭제하는 방법은,

복사본 뜨는 방법 밖에 없는건가요?


일단 제 짧은 지식으로는 특정 행 수정하는법이 안떠오르고..

찾아봐도 안보이네요.


최대한 성능 보장하면서 부족한 머리를 굴려본다면...


수정할 내용 몇줄만 따로 보관 후 성공 루틴 타게하기.

(호출한 쓰래드가, 복사본 저 커다란거 다 뜰때까지 딴일을 못한다는건 좀 그래요)


이거땜에 발생할 기타 side effect를

제 수준에서 해결할 수 있을지는 의문이네요..;

2019-04-01 16:39:47 에 아래 내용에서 변경 됨 #2

앞으로 국비지원용 채팅프로그램에도 파일 읽고쓰기가 필요하고..

개인적으로 안드로이드 재미난거 해볼때도 파일읽고쓰기가 필요해서..


아예 직접 텍스트파일에 sql문 보내면 그에맞게 처리가 되게

Connection, PreparedStatement클래스 만들고,


제가만든 ThreadUtils클래스로 성능테스트를 해봤는대요, 문제가 생겼어요.


아래의 예제는 약 1만개의 글을 쓰는데 걸린 시간을 재는 테스트코드이구요,

	public static void main(String[] args) throws IOException
	{
		Connection conn = Connection.getConnection("myuser", "1234");
		PreparedStatement pstmt = conn.prepareStatement("insert into sample(code, name) values(?, ?)");
		
		Runnable runnable = new Runnable() 
		{
			@Override
			public void run() 
			{
				for(int i = 0 ; i <= 10000 ; i++)
				{
					int result;
					try {
						pstmt.setInt(1, i);
						pstmt.setString(2, "name" + i);
						result = pstmt.executeUpdate();
						
					} catch (IOException e) 
					{
						e.printStackTrace();
					}
				}
			}
		};
		System.out.println(ThreadUtils.getRunningTime(runnable));
	}


걸린 시간이에요. (114초) (i7-7세대 120마넌 게이밍노트북, win10환경)

그 빠르다던 BufferedWriter로 써도 이모양이에요.


파일 수정하는법 찾아봤는데, 아무리 찾아봐도

"기존 파일 복사본 하나 떠서, 특정부분만 새로 쓰던가 수정해라" 이 이야기더라구요...


그럼 insert, select할때는 문제가 없겠지만

delete, update로 특정 행을 수정하거나 삭제할때,

고작 1 row 수정하겠다고 저런 시간을 들이기엔 조금 그런거같아요.


질문)

정말 파일의 특정 row를 수정하거나 삭제하는 방법은,

복사본 뜨는 방법 밖에 없는건가요?


일단 제 짧은 지식으로는 특정 행 수정하는법이 안떠오르고..

찾아봐도 안보이네요.


최대한 성능 보장하면서 부족한 머리를 굴려본다면...


수정할 내용 몇줄만 따로 보관 후 성공 루틴 타게하기.

(호출한 쓰래드가, 복사본 저 커다란거 다 뜰때까지 딴일을 못한다는건 좀 그래요)


이거땜에 발생할 기타 side effect는 코드가 복잡해져서 그렇지,

제 지식수준에서 충분히 해결은 가능해보여요.

2019-04-01 16:38:05 에 아래 내용에서 변경 됨 #1

앞으로 국비지원용 채팅프로그램에도 파일 읽고쓰기가 필요하고..

개인적으로 안드로이드 재미난거 해볼때도 파일읽고쓰기가 필요해서..


아예 직접 텍스트파일에 sql문 보내면 그에맞게 처리가 되게

Connection, PreparedStatement클래스 만들고,


제가만든 ThreadUtils클래스로 성능테스트를 해봤는대요, 문제가 생겼어요.


아래의 예제는 약 1만개의 글을 쓰는데 걸린 시간을 재는 테스트코드이구요,

	public static void main(String[] args) throws IOException
	{
		Connection conn = Connection.getConnection("myuser", "1234");
		PreparedStatement pstmt = conn.prepareStatement("insert into sample(code, name) values(?, ?)");
		
		Runnable runnable = new Runnable() 
		{
			@Override
			public void run() 
			{
				for(int i = 0 ; i <= 10000 ; i++)
				{
					int result;
					try {
						pstmt.setInt(1, i);
						pstmt.setString(2, "name" + i);
						result = pstmt.executeUpdate();
						
					} catch (IOException e) 
					{
						e.printStackTrace();
					}
				}
			}
		};
		System.out.println(ThreadUtils.getRunningTime(runnable));
	}


걸린 시간이에요. (114초) (i7-7세대 120마넌 게이밍노트북, win10환경)

그 빠르다던 BufferedWriter로 써도 이모양이에요.


파일 수정하는법 찾아봤는데, 아무리 찾아봐도

"기존 파일 복사본 하나 떠서, 특정부분만 새로 쓰던가 수정해라" 이 이야기더라구요...


그럼 insert, select할때는 문제가 없겠지만

delete, update로 특정 행을 수정하거나 삭제할때,

고작 1 row 수정하겠다고 저런 시간을 들이기엔 조금 그런거같아요.


질문)

정말 파일의 특정 row를 수정하거나 삭제하는 방법은,

복사본 뜨는 방법 밖에 없는건가요?


일단 제 짧은 지식으로는 특정 행 수정하는법이 안떠오르고..

찾아봐도 안보이네요.