{"id":581,"date":"2021-03-14T16:22:50","date_gmt":"2021-03-14T19:22:50","guid":{"rendered":"https:\/\/millerdantas.com\/blog\/?p=581"},"modified":"2021-03-30T23:47:29","modified_gmt":"2021-03-31T02:47:29","slug":"otimizando-o-kmm-parte-2","status":"publish","type":"post","link":"https:\/\/millerdantas.com\/blog\/2021\/03\/14\/otimizando-o-kmm-parte-2\/","title":{"rendered":"Otimizando o KMM &#8211; Parte 2"},"content":{"rendered":"<h2>Onde paramos mesmo?<\/h2>\n<p>Em nosso \u00faltimo Snapshot tivemos esse resultado<\/p>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_27f3c57dcad3654fe06d0898218731e9.jpg\"><img decoding=\"async\" src=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_27f3c57dcad3654fe06d0898218731e9.jpg\" alt=\"\" \/><\/a><\/p>\n<p>nosso TodoList \u00e9 pra tentar diminuir o tempo e agora carregar os dados on-demand.<\/p>\n<p>O commit at\u00e9 o momento <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/github.com\/millerscout\/Kenshi-Mod-Manager\/commit\/28356e0b813fe5945c9ded34b6b623960d29314b\">Commit<\/a><br \/>\nRemovi algumas propriedades e processamento in\u00fatil, o snapshot ficou:<\/p>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_fe9dc89378d6b199cd6f25a300cb39fd.jpg\"><img decoding=\"async\" src=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_fe9dc89378d6b199cd6f25a300cb39fd.jpg\" alt=\"\" \/><\/a><\/p>\n<p>Ainda n\u00e3o descobri o motivo que deu ~12segs de diferen\u00e7a quando eu removi as cole\u00e7\u00f5es in\u00fateis, sei que melhorou o gen0 e gen 1, n\u00e3o vou focar nisso agora, porque estive fazendo v\u00e1rios experimentos, fazendo buffering a asyncwrite mas acabou dando na m\u00e9dia de 60seg.<\/p>\n<p>Voltarei no tempo de leitura, quando estiver refatorando a leitura de arquivo especificamente<\/p>\n<h2>Encontrei um novo problema.<\/h2>\n<p>Apesar de ter indexado todos os valores e poder acessar rapidamente, conforme o print.<br \/>\n<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_08332d2139924096870d3c359ae8aeb8.jpg\"><img decoding=\"async\" src=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_08332d2139924096870d3c359ae8aeb8.jpg\" alt=\"\" \/><\/a><\/p>\n<p>Ainda tenho o desafio de ter que pesquisar no sqlite a informa\u00e7\u00e3o com o Tipo, Key e section<br \/>\no que se resume em :<\/p>\n<pre><code class=\"language-SQL line-numbers\">select * from modchange mc\njoin (\n    select Key, Type,Section from mod m\n    join modchange mc on mc.modId = m.id\n    where hash = 'HPrv0uf3qAfqvypEDYYHCgC8EQQsmLoBGGNhjOYS5nM='\n) mcd on mcd.key = mc.key and mcd.Type = mc.type and mcd.section = mc.section\n<\/code><\/pre>\n<p>Por\u00e9m ao executar temos 17Segs de execu\u00e7\u00e3o.<br \/>\n<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_80d99bcc5abee4ca7eb4b198fb5a67f1.jpg\"><img decoding=\"async\" src=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_80d99bcc5abee4ca7eb4b198fb5a67f1.jpg\" alt=\"\" \/><\/a><\/p>\n<p>o que acaba sendo invi\u00e1vel.<\/p>\n<p>Uma solu\u00e7\u00e3o que pensei foi transformar key,type e section em um identificador \u00fanico, e ent\u00e3o usar como chave, tornando o processo muito mais r\u00e1pido na pesquisa.<\/p>\n<p><strong>NOTA:<\/strong> enquanto estava fazendo o hash das 3 string, o tempo foi pra <strong>2<\/strong> minutos!,<\/p>\n<p>ent\u00e3o removi o Type, j\u00e1 que ele j\u00e1 \u00e9 um Enum, n\u00e3o precisa participar da cria\u00e7\u00e3o do hash<\/p>\n<p>Eis o resultado em disco e tempo:<br \/>\n<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_5880a6d7a72a5f81296a9ea54a308344.jpg\"><img decoding=\"async\" src=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_5880a6d7a72a5f81296a9ea54a308344.jpg\" alt=\"\" \/><\/a><\/p>\n<p>O tempo m\u00e9dio pra processamento est\u00e1 em cerca de 1 minuto e 130MB salvo em disco, mas eu acho que est\u00e1 ruim, apesar de ser a primeira execu\u00e7\u00e3o, eu quero que fique em torno de 30 segundos.<\/p>\n<p>S\u00e3o aproximadamente 1kk de altera\u00e7\u00f5es. mais ou menos 43k de changes por segundo.<\/p>\n<h2>Depois de descansar, voltei ao problema.<\/h2>\n<p>Fiquei um tempo tentando usar hash, tirando daqui, mudando ali pra ter um tempo menor&#8230; ent\u00e3o me lembrei que eu tinha esquecido de fazer algo BEM mais simples que resolveria o problema, eis o c\u00f3digo em sql:<br \/>\n<center><br \/>\n    <img decoding=\"async\" src=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/whid.gif\"\/ \/><br \/>\n<\/center><br \/>\n<\/p>\n<pre><code class=\"language-SQL line-numbers\">CREATE INDEX idx_mod_change ON ModChange (Key,Type,Section);\n<\/code><\/pre>\n<pre><code>o resultado, como esperado: \n<\/code><\/pre>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_254bf8a57edbf727b98f6a8cdc49a737.jpg\"><img decoding=\"async\" src=\"https:\/\/millerdantas.com\/blog\/wp-content\/uploads\/2021\/03\/wp_editor_md_254bf8a57edbf727b98f6a8cdc49a737.jpg\" alt=\"\" \/><\/a><\/p>\n<p>pois \u00e9, as vezes voc\u00ea est\u00e1 t\u00e3o focado em um cen\u00e1rio que acaba deixando passar os detalhes mais simples, no meu caso eu parei pra descansar, assistir filme e tirar o dia pra desansar, voltei e imitei o panda ao perceber o que tinha deixado pra tr\u00e1s.<\/p>\n<p>era isso por hoje.<\/p>\n<p>Esteja Curioso!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Onde paramos mesmo? Em nosso \u00faltimo Snapshot tivemos esse resultado nosso TodoList \u00e9 pra tentar diminuir o tempo e agora carregar os dados on-demand. O commit at\u00e9 o momento Commit Removi algumas propriedades e processamento in\u00fatil, o snapshot ficou: Ainda n\u00e3o descobri o motivo que deu ~12segs de diferen\u00e7a quando eu removi as cole\u00e7\u00f5es in\u00fateis, &hellip; <a href=\"https:\/\/millerdantas.com\/blog\/2021\/03\/14\/otimizando-o-kmm-parte-2\/\" class=\"more-link\">Continue lendo <span class=\"screen-reader-text\">Otimizando o KMM &#8211; Parte 2<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-581","post","type-post","status-publish","format-standard","hentry","category-programacao"],"_links":{"self":[{"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/posts\/581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/comments?post=581"}],"version-history":[{"count":8,"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/posts\/581\/revisions"}],"predecessor-version":[{"id":595,"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/posts\/581\/revisions\/595"}],"wp:attachment":[{"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/media?parent=581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/categories?post=581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/millerdantas.com\/blog\/wp-json\/wp\/v2\/tags?post=581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}