<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0
    分子結構式相似度搜索使用的是fingerprint進行比較,而
    fingerprint是一個二進制數據,CDK中使用BitSet來存儲該信息,如果要每次比對都去生成BitSet,那也太耗時間了,所以我們需要存儲
    fingerprint信息到數據庫中,比較的時候,直接讀取,而MySQL不支持存儲BitSet數據,網站找了一下,有人想到把
    BitSet轉換成Blob信息進行存儲,然后取的時候再轉換回來,不愧是個好的方法。下面來看看代碼實現:

    /*
     * Copyright (c) 2010-2020 Founder Ltd. All Rights Reserved.
     *
     * This software is the confidential and proprietary information of
     * Founder. You shall not disclose such Confidential Information
     * and shall use it only in accordance with the terms of the agreements
     * you entered into with Founder.
     *
     */
    package com.founder.mysql;
    import java.sql.Blob;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.BitSet;
    public class MySQLUtil {
    public static Blob bitsetToBlob(BitSet myBitSet, Connection con) throws SQLException {
       byte[] byteArray = toByteArray(myBitSet);
       Blob blob = con.createBlob();
       blob.setBytes(1, byteArray);
       return blob;
    }
    private static byte[] toByteArray(BitSet bits) {
       byte[] bytes = new byte[bits.length()/8+1];
       for (int i=0; i<bits.length(); i++) {
           if (bits.get(i)) {
               bytes[bytes.length-i/8-1] |= 1<<(i%8);
           }
       }
       return bytes;
    }
    public static BitSet blobToBitSet(Blob blob) throws SQLException {
       byte[] bytes = blob.getBytes(1, (int)blob.length());
       BitSet bitSet = fromByteArray(bytes);
       return bitSet;
    }
    private static BitSet fromByteArray(byte[] bytes) {
       BitSet bits = new BitSet(1024);  
       for (int i=0; i<bytes.length*8; i++) {
           if ((bytes[bytes.length-i/8-1]&(1<<(i%8))) > 0) {
               bits.set(i);
           }
       }
       return bits;
    }
    }

    通過以上代碼,我們就可以把fingerprint的值計算出來,然后存儲到MySQL數據庫中了。
    進行相似度搜索的時候,值需要取出已經存儲的值進行比對就可以了。
    float coefficient = Tanimoto.calculate(query, MySQLUtil.blobToBitSet(results.getBlob("bits")));
    筆者測試了187586條結構數據,大概需要12秒左右,基本滿足一般需求。
    posted on 2011-06-29 10:20 周銳 閱讀(1694) 評論(0)  編輯  收藏 所屬分類: ChemistryMySQLCDK
    主站蜘蛛池模板: 免费精品99久久国产综合精品| 国产精品亚洲一区二区三区在线观看| 猫咪免费人成在线网站| 成人av免费电影| 亚洲一区二区三区丝袜| 成人黄动漫画免费网站视频| 亚洲一卡二卡三卡| 在线天堂免费观看.WWW| 亚洲人成网站色7799| 免费看片免费播放| 特黄特色大片免费| 中文国产成人精品久久亚洲精品AⅤ无码精品| 免费av欧美国产在钱| 亚洲精品国产日韩| 日本无吗免费一二区| 黄色a级片免费看| 亚洲宅男天堂在线观看无病毒| 99久久成人国产精品免费 | 久久久久久国产精品免费免费男同| 亚洲中文字幕第一页在线| 99在线热播精品免费99热| 久久久久亚洲av无码专区蜜芽| 91精品国产免费| 久久亚洲国产最新网站| 青青草国产免费久久久下载| 一级一级一级毛片免费毛片| 亚洲va无码手机在线电影| 91成人免费观看网站| 男男黄GAY片免费网站WWW| 国产性爱在线观看亚洲黄色一级片 | 精品在线视频免费| 亚洲国产精品无码久久SM| 无码区日韩特区永久免费系列 | 国产精品视频永久免费播放| 日韩免费高清一级毛片| 亚洲高清在线视频| 欧洲美熟女乱又伦免费视频| 91视频免费观看| 国产精品亚洲片在线va| 国产亚洲情侣一区二区无码AV| 亚洲成人免费网址|